【问题标题】:Mongoose populate list of referencesMongoose 填充参考列表
【发布时间】:2015-03-04 11:25:12
【问题描述】:

Mongoose (v3.8) + Node.js

我有一个名为“产品”的模型,它有这个字段:

  upvoted_by: [{
    user_id: { type: Schema.ObjectId, ref: 'Users' },
    timestamp: { type: Date }
  }]

Users 模型还有很多其他字段。

要添加赞成票,我这样做:

product.upvoted_by.push({
  user_id: req.user,
  timestamp: new Date()
});

我正在尝试填充 upvoted_by.user_id 字段,以便它包含相应的用户数据。

我试过了,但它似乎不起作用:

// product (= a document) has been found before
product.populate('upvoted_by.user_id', {
  select: 'username'    // username is a field in the Users model
}, function(err, doc) {
  console.log(JSON.stringify(doc));
});

知道出了什么问题以及如何解决吗?

【问题讨论】:

    标签: node.js mongodb mongoose relationship mongoose-populate


    【解决方案1】:

    根据文档,以下语法应该有效,其中select 是传递给populate 方法的Object 的属性。

    product.populate({path:"upvoted_by.user_id",
                      select:"username"}).exec(function(err, doc) {
      console.log(err);
      console.log(JSON.stringify(doc));
    });
    

    【讨论】:

    • 我不得不改变一些东西,但已经足够接近了!
    • @KaranGoel,一个友好的仅供参考:如果有人花时间帮助你,但你基本上发布了一个小调整并接受作为他们答案的答案(确实解决了问题)它没有激励人们在未来帮助您(或其他人)。
    【解决方案2】:

    我最终这样做了:

    product.populate({
      path: 'upvoted_by.user_id',
      select: 'username profile.picture profile.name'}, function(err, doc) {
        console.log(JSON.stringify(doc.upvoted_by));
    });
    

    【讨论】:

      猜你喜欢
      • 2020-05-08
      • 2021-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-21
      • 2012-01-22
      • 1970-01-01
      • 2013-07-01
      相关资源
      最近更新 更多