无法使用 mongoose populate() 填充文档

unable to populate documents using mongoose populate()

我正在使用 mongoose 快速创建一个应用程序。我有一个名为 users 的集合,其中有一个名为 _subscriptions 的文件,它是一个对象数组,每个对象包含一个名为 field 的字段,它是 [ 的文档的 ObjectId =16=](这是我数据库中的另一个集合)。

我想制作这样一个 API,在获取 id 参数后 returns 我是一个 user 表单 users 集合,其中填充了 field 属性而不是它在字段值中的 id field。为此,我正在使用填充方法,但它不起作用。

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

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

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

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);`

这是用户的架构和模型

var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var UserSchema = new Schema({
    _id: Schema.Types.ObjectId,
    salt: String,
    provider: String,
    name: String,
    email: {
        type: String,
        required: true
    },
    password: {
        type: String,
        required: true
    },
    _subscriptions: [{
        field: {
            type: mongoose.Schema.ObjectId,
            ref: 'Field',
        },
        status: String,
        dateSubscribed: Date,
        payments: [{}]
    }],
    role: String,
});

module.exports = mongoose.model('User', UserSchema);

这是用户路由器的代码

var Field = require('../model/Field');
var express = require('express');
var router = express.Router();
var User = require('../model/User');

router.get('/',function(req, res, next) {
    User.find({}, function(err, result) {
        if (err) {
            console.log(err);
            res.send('something wrong');
        }
        res.status(200).send(result);
    }).populate( '_subscriptions.field').exec(function (err, story) {
        if (err) return handleError(err);
        console.log('Here!!!!!');
      });
});

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('field').exec(function (err, story) {
        if (err) return handleError(err);
        console.log('Here!!!!!');
    });
});

router.get('/getSubscriptions/:id',function(req, res, next) {
    var id = req.params.id;
    User.findById(id, function(err, doc) {
      if (err) {
        console.error('error, no entry found');
      }
      var type = typeof(doc);
      res.status(200).send(doc);
    })
});
 module.exports = router;

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

这是我使用邮递员得到的回复

我期待有人帮助解决这个问题 因为我无法确定我的错误。非常感谢您在这方面的帮助。

提前致谢

我的理解是,在用户集合中,有_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!!!!!');
    });
});