【问题标题】:Populate multiple fields using lookup in mongodb使用 mongodb 中的查找填充多个字段
【发布时间】:2018-02-07 15:30:47
【问题描述】:

我是 mongodb 新手,想使用查找填充两个 id

例如:

{
      "sampleId1": "5kjksds8nkjfhsjfi8kl",
      "sampleId2": "7jhjshfi9jsfkjsdfkkk"
    }

我正在使用聚合框架来查询数据并希望填充两个 id。

我希望$loopup 填充两个类似于

Model.find().populate('sampleId1').populate('sampleId2')

【问题讨论】:

  • 您想要在上面添加$lookup 的两个文档是什么样的?请提供minimal reproducible example
  • 你在用猫鼬吗?
  • @ManjeetThakur 是的。我正在使用猫鼬

标签: mongodb aggregation-framework


【解决方案1】:

对于你的情况,我想像这样建议你mongoose-autopopulate

    const autopopulate = require('mongoose-autopopulate')'

    const sampleSchema = new Schema({
      sampleId1: {type: Schema.ObjectId, ref: 'ColleactionName', autopopulate: {select: 'firstName, lastName'}},
    sampleId2: {type: Schema.ObjectId, ref: 'ColleactionName', autopopulate: {select: 'firstName, lastName'}}
    })


    sampleSchema.plugin(autopopulate)

module.exports = mongoose.model('sampleSchema', sampleSchema)

现在每当您请求查找时,它都会自动填充所有字段 谁有Schema.ObjectId

let criteria = {},
projection = {},
options = {lean: true}


Model.find(criteria, projection, options, (err, result) => {
 console.log(result); // See out-put 
})

您需要检查架构中的第二件事,即 sampleId1 和 sampleId2 都具有类型 type: Schema.ObjectId 并引用集合名称 ref: 'ColleactionName'

你已经做过的问题的第二种方法

sampleSchema.
  find(...).
  populate('sampleId1').
  populate('sampleId2').
  exec();

【讨论】:

  • 尝试了自动填充插件,但是在使用聚合查询时它似乎不起作用。
  • 效果很好,只是只填充了两个字段。我用空格替换了逗号,所以我可以填充 3 个或更多字段。谢谢你的帮助。 ... ... ...sampleId1:{type:Schema.ObjectId,ref:'ColleactionName',自动填充:{select:'firstName lastNamebirthday'}},... ... ...
猜你喜欢
  • 2022-01-15
  • 2013-11-03
  • 2023-03-11
  • 2021-11-03
  • 1970-01-01
  • 2021-02-16
  • 1970-01-01
  • 2015-07-18
  • 1970-01-01
相关资源
最近更新 更多