如何在选择“多方”后发布流星中一对多关系的“一方”?

时间:2013-10-04 15:45:48

标签: meteor one-to-many publish

我在Meteor中有两个对象集合,它们与一对多关系相关联。课程包含地方的_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}});
});

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

我已经阅读了关于发现流星书的高级出版物章节,似乎可以发送地方和课程,但我不明白该怎么做。

1 个答案:

答案 0 :(得分: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,用另一个光标返回这些地方非常简单。