如何正确使用函数 populate()

Posted

技术标签:

【中文标题】如何正确使用函数 populate()【英文标题】:How to use the function populate() correctly 【发布时间】: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 时,它可以工作:

谁能帮忙?

【问题讨论】:

【参考方案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);
        );
     );   
);

【讨论】:

以上是关于如何正确使用函数 populate()的主要内容,如果未能解决你的问题,请参考以下文章

如何填充新创建的猫鼬文档?

SoapClient无法从SimpleXMLObject渲染正确的xml

如何正确使用haskell中的长度函数?

如何正确使用 .animate() 函数 -- top

如何正确使用转换构造函数?

如何在 Oracle 11g 中正确使用 MEMBER OF 函数