字符串化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 对象数组拼接

Expressjs Mongoose 发现嵌套的嵌入文档未定义

Mongoose/MongoDB 结果字段在 Javascript 中显示为未定义