0

我在 Meteor 中有两个对象集合,它们以一对多的关系链接。Courses 包含 Places 的 _id。

我有一个出版物是:

Meteor.publish('courses', function(day_selector, price_min, price_max){
    return Courses.find({   
        day_of_week : {$in: day_selector}, 
        price : {$gt : price_min, $lt : price_max}});
});

我想创建另一个仅返回至少选择一门课程的地方的出版物。

我已经阅读了发现流星书的高级出版章节,似乎可以将地点与课程一起发送,但我不明白该怎么做。

4

1 回答 1

1

几个月前我花了一段时间才弄清楚这个问题,但这是解决方案:

Meteor.publish('courses',function(day_selector, price_min, price_max){
    var coursesCursor=Courses.find({
        day_of_week : {$in: day_selector}, 
        price : {$gt : price_min, $lt : price_max}
    });
    var courses=coursesCursor.fetch();
    var coursesPlacesIds=_.pluck(courses,"place_id");
    var placesCursor=Places.find({
        _id : {$in : coursesPlacesIds}
    });
    //
    return [
        coursesCursor,
        placesCursor
    ];
});

关键是您可以从发布函数返回多个光标,知道这个微妙的功能允许您编写发布代码来发布您的两个集合文档。

棘手的部分是从由发布参数过滤的课程光标中提取地点的 id:这就是我们使用 underscore.pluck 的原因(请参阅文档)。一旦我们得到这些 id,用另一个光标返回位置就很简单了。

于 2013-10-04T16:37:22.800 回答