0

猫鼬 (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));
});

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

4

2 回答 2

3

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

product.populate({path:"upvoted_by.user_id",
                  select:"username"}).exec(function(err, doc) {
  console.log(err);
  console.log(JSON.stringify(doc));
});
于 2015-01-06T19:01:17.537 回答
0

我最终这样做了:

product.populate({
  path: 'upvoted_by.user_id',
  select: 'username profile.picture profile.name'}, function(err, doc) {
    console.log(JSON.stringify(doc.upvoted_by));
});
于 2015-01-06T20:36:10.380 回答