无法使用猫鼬populate()填充文档

时间:2018-08-19 12:28:09

标签: mongodb mongoose-populate

我正在使用猫鼬做快递申请。我有一个名为users的集合,其中有一个名为_subscriptions的文件,该文件是一个对象数组,每个对象都包含一个名为field的字段,该字段是{的文档的ObjectId {1}}(这是我数据库中的另一个集合)。

我想制作这样一个API,在获取ID参数后,我将获得一个fields形式的user形式的users集合,而不是其填充字段{{1 }}。为此,我正在使用填充方法,但是它不起作用。

这是显示field集合的屏幕截图:

This is screenshot showing <code>users</code> collection

这是显示field集合的屏幕截图:

enter image description here

这是字段(文件名Field.js)的架构:

users

这是用户的模式和模型

fields

这是用户路由器的代码

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var FieldSchema = new Schema(
    {
        _id: Schema.Types.ObjectId,  
        name: String,
        price: Number,
        _categories: [{
            type: Schema.ObjectId,
        }],
    }
);

module.exports = mongoose.model('Field', FieldSchema);`

这是我调用app.use方法的地方:

enter image description here

这是我正在使用邮递员的回复

enter image description here

我期待着有人的帮助解决此问题 因为我无法识别我的错误。在这方面您的帮助将受到高度赞赏。

提前感谢

1 个答案:

答案 0 :(得分:1)

我了解的是,在用户集合中有_subscriptions,在_subscriptions中有field。如果这是您的架构,则应该像当前已传递的那样,将“ _subscriptions.field”作为参数传递给填充函数,而不是“ field”。

因此,您用于用户子路由/findById/:id的代码必须像这样:

router.get('/findById/:id',function(req, res, next) {
    var id = req.params.id;
    User.findById(id, function(err, doc) {
      if (err) {
        console.error('error, no entry found');
      }
      res.status(200).send(doc);
    }).populate('_subscriptions.field').exec(function (err, story) {
        if (err) return handleError(err);
        console.log('Here!!!!!');
    });
});