我在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}});
});
我想创建另一个仅返回至少选择了一门课程的地方的出版物。
我已经阅读了关于发现流星书的高级出版物章节,似乎可以发送地方和课程,但我不明白该怎么做。
答案 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,用另一个光标返回这些地方非常简单。