Mongo:获取两个集合的数据 - 第二个取决于第一个集合

时间:2015-09-15 14:29:46

标签: javascript mongodb meteor

我尝试在该文章的下方显示一篇文章,我想展示属于该文章的一些文献资料。 在收集文献中有很多文档,但我想过滤那些有article_id: article._id

的文档

我相信我认为这很复杂,但这正是我想要做的事情:

publication.js

Meteor.publish('references', function(){
    return Articles.find({});
});

Router.js

Router.route('/cars', {
    name: 'main',
    data: function() {
         return {
             article: Articles.find({})
         }
    }
});

template_1.html

<template name="main">
    <div>
        {{article._id}}
        <header><h1>{{article.title}}</h1></header>
        {{article.content}}
        {{>literature reference=article._id}}
    </div>
</template>

template_2.html

<template name="literature">
    Same id: {{this.reference}}
    Now get all item of literature-collection
    <ul>
        {{#each items}}
            <li>{{this.title}}</li>
        {{/each}}
    </ul>
</template>

helper.js

Template.literature.helpers({
    items: function() {
        return Literature.find({article_id: article._id}); /* this should be the id the first template */
    }
});
猜猜这可能会更容易。所以我的第二个想法是将文献查询也放到路由器中:

Router.route('/cars', {
    name: 'main',
    data: function() {
         return {
             article: Articles.find({}),
             items: Literature.find({article_id: article._id}) /* How do I get the variable which is needed? */
         }
    }
});

1 个答案:

答案 0 :(得分:0)

您应该使用meteor add reywood:publish-composite

所以你的发布功能是这样的:

Meteor.publishComposite('articles', function(){
    return {
        find: function(){
            return Articles.find();
        },
        children: [{
            find: function(article){
                return Literature.find({article_id: article._id})
            }
        }]
    }
});