node.js - 如何正确使用函数 populate()

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

我使用函数.populate() 来获取按类别 分组的equipements,所以我的模型是这样的

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 为 null

enter image description here

当我使用 cmd 时,它起作用了:

enter image description here

有人能帮忙吗?

最佳答案

您的代码中有错别字:

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

关于node.js - 如何正确使用函数 populate(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38954992/

相关文章:

node.js - 如何从函数返回值

javascript - 使用 Angular/Nodejs 将表单数据发布到 MongoDB 数据库

node.js - Nodemailer gmail oauth 问题

javascript - 错误 : ENOENT, 没有这样的文件或目录 '/usr/lib/nodejs:/usr/lib/node_modules:/usr/share/javascript/app/models

javascript - _ids 数组的 MongoDB 请求(这可能吗?)

node.js - 包含使用 Mongoose 查询 MongoDB 数组

node.js - TypeScript 0.8.2 在内部模块中导入 Node.js 模块

javascript - 选择某些内容后,Angular ngOptions 列表空白

node.js - 在链式 Promisified 函数内创建 MongoDB 文档

javascript - 我想删除一个项目,但它删除了整个数据库