链接协会与水线

时间:2014-08-23 22:06:08

标签: database orm sails.js waterline

我有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或我必须手动完成?

谢谢,

1 个答案:

答案 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

});