【问题标题】:How to use the function populate() correctly如何正确使用函数 populate()
【发布时间】:2016-12-21 15:41:07
【问题描述】:

我使用函数.populate()得到equipements分组category,所以我的模型是这样的

var mongoose = require('../config/db');
var EquipementSchema = mongoose.Schema({
    libelle: String,
    marque: String,
    category: { type: mongoose.Schema.Types.ObjectId, ref: 'Category' }
});

module.exports = mongoose.model('Equipement', EquipementSchema);

路线:

router.get('/categorie_id', function(req, res, next){
    models.equipement.aggregate([
        {
            $group : {
                _id : '$categorie_id',
                equipements: { $push: '$$ROOT' }
            }
        }
    ].exec(function(err , results){

         if(err) res.json({error: err});
         res.json(results);
     }));   
});

当我使用 Postman 时,results 为空

当我使用 cmd 时,它可以工作:

谁能帮忙?

【问题讨论】:

    标签: node.js mongodb mongoose aggregation-framework mongoose-populate


    【解决方案1】:

    您的代码中有错字:

    router.get('/categorie_id', function(req, res, next){
        models.equipement.aggregate([
            {
                $group : {
                    _id : '$categorie_id',
                    equipements: { $push: '$$ROOT' }
                }
            }
        ].exec(function(err , results){ // <-- typo here: missing a closing bracket after the pipeline array
    
             if(err) res.json({error: err});
             res.json(results);
         }));   
    });
    

    应该是

    router.get('/categorie_id', function(req, res, next){
        models.equipement.aggregate([
            {
                "$group": {
                    "_id": "$categorie_id",
                    "equipements": { "$push": "$$ROOT" }
                }
            }
        ]).exec(function(err, results){ 
             if(err) res.json({error: err});
             res.json(results);
         });   
    });
    

    在更正聚合管道查询后,使用 Model.populate() 函数填充文档引用。使用results 数组将_id 路径填充为:

    router.get('/categorie_id', function(req, res, next){
        models.equipement.aggregate([
            {
                "$group": {
                    "_id": "$categorie_id",
                    "equipements": { "$push": "$$ROOT" }
                }
            }
        ]).exec(function(err, results){ 
            if (err) res.json({error: err});
            models.equipement.populate(results, { "path": "_id" }, function(err, result) {
                if(err) res.json({error: err});
                console.log(result);
                res.json(result);
            });
         });   
    });
    

    【讨论】:

      猜你喜欢
      • 2015-01-08
      • 2017-08-19
      • 2014-04-22
      • 2021-02-03
      • 2011-12-22
      • 2010-11-16
      • 1970-01-01
      • 2011-02-12
      • 1970-01-01
      相关资源
      最近更新 更多