首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何根据对不同集合的查找调用的结果在mongodb集合中查找记录?

如何根据对不同集合的查找调用的结果在mongodb集合中查找记录?
EN

Stack Overflow用户
提问于 2013-09-27 00:34:38
回答 2查看 1.3K关注 0票数 2

我有以下收藏:

RideOffers:用户在网站上发布的骑行报价集合,以及BidsOnOffers:上述骑行报价的集合。每一次投标都与一次搭便车报价有关。

我想向用户发送一份她已经发布的关于骑行报价的出价清单,但不是所有的骑行报价:用户应该能够看到她的骑手报价的出价,而不是其他人提供的任何出价。对我该怎么做有什么想法吗?到目前为止,我想出的是:

代码语言:javascript
复制
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值数组?还是我的做法完全错了?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-27 00:52:40

您的方法是正确的,但您的语法是错误的。

若要从RideOffers集合中构建ids数组,请使用fetch (从Meteor游标)获取文档数组,并使用“字段”选项仅从这些文档中选择_id属性:

代码语言:javascript
复制
var myRideOffersIds=RideOffers.find({
    userId:this.userId,
    active:true
},{
    fields:{
        _id:1
    }
}).fetch();

然后您可以在$in中使用这个变量:

代码语言:javascript
复制
return BidsOnOffers.find({
    offerId:{
        $in:myRideOffersIds
    },
    active:true
});
票数 3
EN

Stack Overflow用户

发布于 2015-10-04 11:13:14

接受的答案建议使用fetch()和“字段”选项从RideOffers集合构建一个ids数组,如下所示:

代码语言:javascript
复制
var myRideOffersIds=RideOffers.find({
    userId:this.userId,
    active:true
},{
    fields:{
        _id:1
    }
}).fetch();

然后在$in中使用这个变量:

代码语言:javascript
复制
return BidsOnOffers.find({
    offerId:{
        $in:myRideOffersIds
    },
    active:true
});

然而,这对我不起作用-没有任何文件被退回。我认为它失败了,因为fetch()返回一个对象数组:每个对象只有一个字段,但它仍然是一个对象,因此数组类似于:{id:"1233"},{id:"5678"}。但是"$in“运算符只能搜索"1234”、"5678“形式的值数组。

我使用地图将myRideOffersIds创建为一个简单的值数组:

代码语言:javascript
复制
var myRideOffersIds=RideOffers.find({
    userId:this.userId,
    active:true
}).map(function(val) {return val._id});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19040900

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档