如何正确使用函数 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()的主要内容,如果未能解决你的问题,请参考以下文章