字符串化Mongoose对象时nodejs“未定义”
Posted
技术标签:
【中文标题】字符串化Mongoose对象时nodejs“未定义”【英文标题】:nodejs "undefined" when stringifying Mongoose object 【发布时间】:2020-08-20 01:31:17 【问题描述】:在我的代码中,我有以下控制台日志:
console.log(JSON.stringify(department.locationFilter, null, 2));
console.log(JSON.stringify(department.locationFilter.geoLocation, null, 2));
第一个日志结果:
"city": "Stuttgart",
"radius": 50,
"geoLocation":
"type": "Point",
"coordinates": [
9.1800132,
48.7784485
]
第二个日志结果:
undefined
当我登录"geoLocation" in department.locationFilter
时,它也会导致false
。
我不明白为什么 geoLocation 是 undefined
,因为它存在于 JSON 对象中。
更多信息,从mongodb读取部门。
【问题讨论】:
你使用猫鼬吗?因为 Mongoose 以生成奇怪且不可变的对象而闻名。您记录的内容不一定是您认为的 JSON,而是 Mongoose 的一些怪人。首先尝试将 Mongoose 对象转换为普通的普通对象:department = department.toObject()
然后再试一次
geoLocation
是否有任何不可见的空白字符?
geoLocation
在所有记录中都可用吗?
是的,我正在使用猫鼬。没有空格
@JeremyTille 你的小费有效。我会接受它作为答案。奇怪的事情,因为城市和半径工作,但地理位置不是
【参考方案1】:
Mongoose 以生成奇怪且不可变的对象而闻名。您记录的内容不一定是您认为的 JSON,而是 Mongoose 的一些怪人。尝试先将 Mongoose 对象转换为普通的普通对象:department = department.toObject()
。
另外,如果您只需要数据而不需要完整的 Mongoose 对象,您可以使用 .lean()
进行查询:
Model.find().lean()
您将获得开箱即用的简单对象,并且 lean() 更快。
【讨论】:
以上是关于字符串化Mongoose对象时nodejs“未定义”的主要内容,如果未能解决你的问题,请参考以下文章
将对象数组添加到突变 react-graphql-apollo-mongoose 时,“无法读取未定义的属性 'get'”
MongoDB / Mongoose / nodejs 中的引用 - 并行化
TypeError.无法读取未定义的'$__'属性。无法读取未定义的'$__'属性 - Mongoose v5.^。
与 nodejs、mongoose 和 JSON 对象数组拼接