代码之家  ›  专栏  ›  技术社区  ›  Al Fahad

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

  •  0
  • Al Fahad  · 技术社区  · 6 年前

    users 其中有一个名为 _subscriptions ,它是一个对象数组,每个对象都包含一个名为 field 它是 fields (这是我数据库中的另一个集合)。

    我想创建这样一个API,在获取id参数之后,它将返回一个 user 形式 收藏 在字段值中填充属性而不是其id 领域

    这是屏幕截图 收藏:

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

    这是屏幕截图 领域 收藏:

    enter image description here

    这是字段(File name 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方法的地方:

    enter image description here

    这是我用邮递员收到的回复

    enter image description here

    我期待有人协助解决这个问题

    提前感谢

    1 回复  |  直到 6 年前
        1
  •  1
  •   Muhammad Danish    6 年前

    我的理解是,在用户集合中,有 _subscriptions _订阅 ,有 field _subscriptions.field “作为populate函数的参数,不是” 领域 “正如你目前所经历的那样。

    所以,你的用户子路线代码, /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!!!!!');
        });
    });