【问题标题】:Mongoose Populate() not populating array of ObjectIdsMongoose Populate() 不填充 ObjectIds 数组
【发布时间】:2020-05-18 17:32:46
【问题描述】:

我刚刚开始使用 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,但如果我检查数据库或跳过填充调用,显然会存储很多汽车 ID。

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

我做错了什么?如您所知,我有点困惑,不胜感激。谢谢!

【问题讨论】:

    标签: javascript mongoose model associations populate


    【解决方案1】:

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

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

    最初我在理解为什么我无法访问“汽车”数组/为什么它总是返回定义时遇到了一些困难,但后来我意识到,感谢 https://stackoverflow.com/a/25004168/2768479 中的 Nathan Romano,这是因为汽车“嵌套得更多超过 2 个级别,因此默认情况下,输出由“[Object”] 表示。只需运行

    owner[0].cars
    

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

    【讨论】:

      猜你喜欢
      • 2017-02-22
      • 2020-07-21
      • 2023-03-30
      • 1970-01-01
      • 2016-02-14
      • 1970-01-01
      • 2019-01-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多