如何正确使用populate()函数

时间:2016-08-15 12:22:23

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

我使用函数.populate()equipementscategory分组,所以我的模型就像这样

enter image description here

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

enter image description here

当我使用Postman时,results为空

enter image description here

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

enter image description here

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

您的代码中有拼写错误:

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