用mongoose填充嵌套数组
如何在示例文档中填充“组件”:
{ "__v": 1, "_id": "5252875356f64d6d28000001", "pages": [ { "__v": 1, "_id": "5252875a56f64d6d28000002", "page": { "components": [ "525287a01877a68528000001" ] } } ], "author": "Book Author", "title": "Book Title" }
这是我的JS,我通过Mongoose获取文档:
Project.findById(id).populate('pages').exec(function(err, project) { res.json(project); });
mongoose4.5支持这个
Project.find(query) .populate({ path: 'pages', populate: { path: 'components', model: 'Component' } }) .exec(function(err, docs) {});
这对我行得通:
Project.find(query) .lean() .populate({ path: 'pages' }) .exec(function(err, docs) { var options = { path: 'pages.components', model: 'Component' }; if (err) return res.json(500); Project.populate(docs, options, function (err, projects) { res.json(projects); }); });
文档: Model.populate
正如其他人所指出的, Mongoose 4
支持这一点。 需要注意的是,如果需要的话,您也可以深入到比一个层次更深的层次,尽pipe在文档中没有注意到:
Project.findOne({name: req.query.name}) .populate({ path: 'threads', populate: { path: 'messages' , model: 'Message' , populate: { path: 'user' , model: 'User' } } })
我发现这非常有用的创build一个feathersjs之前挂钩填充2 ref水平深的关系。 mongoose模型简单地有
tables = new Schema({ .. tableTypesB: { type: Schema.Types.ObjectId, ref: 'tableTypesB' }, .. } tableTypesB = new Schema({ .. tableType: { type: Schema.Types.ObjectId, ref: 'tableTypes' }, .. }
然后在hook之前:
module.exports = function(options = {}) { return function populateTables(hook) { hook.params.query.$populate = { path: 'tableTypesB', populate: { path: 'tableType' } } return Promise.resolve(hook) } }
与我试图实现这一点的一些其他方法相比,这非常简单。
删除文档参考
if (err) { return res.json(500); } Project.populate(docs, options, function (err, projects) { res.json(projects); });
这对我有效。
if (err) { return res.json(500); } Project.populate(options, function (err, projects) { res.json(projects); });