Mongoose Populate()未填充ObjectIds数组

xxe27gdn  于 2023-08-06  发布在  Go
关注(0)|答案(1)|浏览(77)

我刚刚开始使用Mongoose,并试图使用一个非常基本的示例来让populate()工作。目前我有两个模型,一辆车和一个车主模型。
所有者

const mongoose = require('mongoose')

module.exports = mongoose.model('Owner', mongoose.Schema({
  name: String,
  cars: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Car' }]
}))

字符串
汽车

const mongoose = require('mongoose')

module.exports = mongoose.model('Car', mongoose.Schema({
  brand: String
}))


这个想法是,一个业主应该能够拥有几辆汽车。所以我为所有者的汽车数组中的每辆车存储一个ObjectId引用。

Owner.findById(ownerId, function (err, owner) {
  if (err) console.log(err)

  const c = new Car({ brand: 'Toyota' })

  owner.cars.push(c)
  owner.save()
  console.log(owner.cars) // prints out an array containing multiple car _ids, everything working so far
})


然后,我想用来自Car Model(他们的品牌)的数据填充汽车数组。然而,运行下面的填充只返回一个文档[{"_id”:“....",“brand”:“Toyota”,"__v”:0}]。数组长度为1,但如果我检查数据库或跳过populate调用,显然会存储很多Car id。

Owner.findById(ownerId).populate('cars').exec(function (err, owner) {
  if (err) console.log(err)
  console.log(owner) //this only returns one object 
})


我做错了什么?正如你所看到的,我有点困惑,并希望得到任何帮助。谢谢你,谢谢

6ss1mwsb

6ss1mwsb1#

第一个问题可能与ObjectIds错误有关。因此,我从MongoDB中删除了所有内容并重新开始(我没有更改模式中的任何内容,因此问题不在这里)。在DB为空的情况下,我创建了一个新的Owner,并将两个Car ID推送到“汽车”数组中。然后我再次运行populate(),它返回了

[
  {
    cars: [ [Object], [Object] ],
    _id: 5e375dc926cd72641cd60d74,
    name: 'James',
    __v: 0
  }
]

字符串
最初我很难理解为什么我不能访问“汽车”数组/为什么它总是返回defined,但后来我意识到,感谢https://stackoverflow.com/a/25004168/2768479中的Nathan Romano,这是因为cars“嵌套超过2层,所以默认情况下输出由“[Object”]表示。只需跑步

owner[0].cars


我得到了我正在寻找的汽车,populate()按预期工作。

相关问题