我有以下收藏:
RideOffers:用户在网站上发布的骑行报价集合,以及BidsOnOffers:上述骑行报价的集合。每一次投标都与一次搭便车报价有关。
我想向用户发送一份她已经发布的关于骑行报价的出价清单,但不是所有的骑行报价:用户应该能够看到她的骑手报价的出价,而不是其他人提供的任何出价。对我该怎么做有什么想法吗?到目前为止,我想出的是:
Meteor.publish('RideOffers', function() {
return RideOffers.find();
});
Meteor.publish('BidsOnMyOffers', function() {
var MyRideOffers = RideOffers.find({userId: this.userId, active: true});
return BidsOnOffers.find({ offerId: {$in : [MyRideOffers._id]}, active: true});
});这显然不起作用,问题在于{$in : [MyRideOffers._id]},我想。我是否尝试从_id中获取一个MyRideOffers值数组?还是我的做法完全错了?
发布于 2013-09-27 00:52:40
您的方法是正确的,但您的语法是错误的。
若要从RideOffers集合中构建ids数组,请使用fetch (从Meteor游标)获取文档数组,并使用“字段”选项仅从这些文档中选择_id属性:
var myRideOffersIds=RideOffers.find({
userId:this.userId,
active:true
},{
fields:{
_id:1
}
}).fetch();然后您可以在$in中使用这个变量:
return BidsOnOffers.find({
offerId:{
$in:myRideOffersIds
},
active:true
});发布于 2015-10-04 11:13:14
接受的答案建议使用fetch()和“字段”选项从RideOffers集合构建一个ids数组,如下所示:
var myRideOffersIds=RideOffers.find({
userId:this.userId,
active:true
},{
fields:{
_id:1
}
}).fetch();然后在$in中使用这个变量:
return BidsOnOffers.find({
offerId:{
$in:myRideOffersIds
},
active:true
});然而,这对我不起作用-没有任何文件被退回。我认为它失败了,因为fetch()返回一个对象数组:每个对象只有一个字段,但它仍然是一个对象,因此数组类似于:{id:"1233"},{id:"5678"}。但是"$in“运算符只能搜索"1234”、"5678“形式的值数组。
我使用地图将myRideOffersIds创建为一个简单的值数组:
var myRideOffersIds=RideOffers.find({
userId:this.userId,
active:true
}).map(function(val) {return val._id});https://stackoverflow.com/questions/19040900
复制相似问题