我有3个型号:Feed,link和source。
每个Feed都包含一对多关联的链接。
Feed.js:
links: {
collection: 'link',
via: 'feed'
}
链接模型通过一对一关联连接到源模型。
Link.js:
source: {
model: 'source'
}
源模型中没有什么特别的东西。
当我执行下面的查询时,我无法获得源模型中定义的链接的详细信息。
Feed.find({}).populate('links').exec(console.log);
结果:
{
links:
[
{
title: 'News link',
url: 'http://href.com/sfs',
feed: 1,
source: 1,
id: 1,
createdAt: '2014-08-23T13:01:42.989Z',
updatedAt: '2014-08-23T13:01:42.989Z'
}
],
title: 'Feed Title',
photo: 'img/img.png',
yesNo: false,
id: 1,
createdAt: '2014-08-23T13:00:43.317Z',
updatedAt: '2014-08-23T13:00:43.317Z'
}
我想填充"链接"与源模型的集合。是否可以使用Waterline或我必须手动完成?
谢谢,
答案 0 :(得分:0)
水线人口目前只有一个层次;多层次人口在路线图上。目前最好的想法是使用填充的链接进行初始Feed
查询,从source
记录中收集所有Link
个外键,一次性找到它们然后做一个映射。类似的东西:
async.auto({
// Get all feeds
feeds: function(cb) {
Feed.find({}).populate('links').exec(cb);
},
// Get all sources of feed links
sources: ['feeds', function(cb, results) {
var sourceIds = results.feeds.reduce(function(memo, feed) {
return memo.concat(_.pluck(feed.links, 'source'));
}, []);
Source.find(sourceIds).exec(cb);
}],
// Map source objects onto links
mapping: ['feeds', 'sources', function(cb, results) {
// Index sources by ID
var sources = _.indexBy(results.sources, 'id');
var feeds = results.feeds.map(function(feed) {
feed.links = feeds.links.map(function(link) {
link.source = sources[link.source];
return link;
});
return feed;
});
return cb(null, feeds);
}]
}, function done(err, results) {
// Handle err or do something with results.mapping
});