我有一个find查询返回一个对象的多个结果,这个对象包含一个包含另一个模型的模型,问题是水线不支持嵌套的填充,所以它填充了第一个模型而不是它#&# 39;内在模式。
我见过的所有示例都是针对findOne查询的,我正在寻找一种方法来解决返回多个结果的查找查询。
这是我的模型结构:
// Container.js
widgets: {
model: 'websitewidget'
}
// WebsiteWidget.js
html: {
model: 'widgethtml'
}
// WidgetHtml.js
source: {
type: 'String'
}
我的查询返回所有容器,并在其中填充WebsiteWidget,但不会填充WebsiteWidget中的WidgetHtml模型。
这是我的代码到目前为止,如果有人会告诉我我做错了什么,我将不胜感激:
async.auto({
//First get the containers
container: function(cb) {
Container.find()
.where({
website: options.websiteId,
or: [
{ 'layout': '' },
{ 'layout': options.page.layout, page: (options.page.layout == 'default' ? 0 : options.page.id) } // TODO: perhaps there's a better way of doing it? instead of limiting page to default name.
]
})
.populate('widgets')
.exec(cb);
},
// Then all of the widget's widgetHtmls, using an "in" query by
// setting "id" criteria to an array of user IDs
widgetsHtml: ['container', function(cb, results) {
WidgetHtml.find({id: _.pluck(results.container.widgets, 'widgets')}).exec(cb);
}],
// Map the comment users to their comments
map: ['widgetsHtml', function(cb, results) {
// Index widget's widgetHtml by ID
var widgetsHtml = _.indexBy(results.widgetsHtml, 'id');
// Get a plain object version of container & widgets
var container = results.container[0];
// Map users onto comments
container.widgets = container.widgets.map(function(widget) {
widget.widgetHtml = widgetsHtml[widget.widgetHtml];
return widget;
});
return cb(null, container);
}]
},
// After all the async magic is finished, return the mapped result
// (or an error if any occurred during the async block)
function finish(err, results) {
if (err) {return res.serverError(err);}
return res.json(results.map);
}
);