如何使用$ and逻辑查询运算符将其应用于所有三个查询子句?

时间:2019-01-30 09:13:50

标签: mongodb meteor mongodb-query

尽管我正在使用$and逻辑查询运算符来联接多个查询子句,但是$and逻辑查询运算符似乎 IGNORE 其中一个查询子句。有人可以在查询中解释我哪里出问题了吗?

在主题recipientsDetails.find({}).fetch();下找到文档的相关内容:

0
payersNumber: "+254700027685"
recipientNumber: "+254700007633"

1
payersNumber: "+254700007633"
recipientNumber: "+254700007633"

2
payersNumber: "+254700007633"
recipientNumber: "+254700007633"

运行下面的查询(由$and逻辑查询运算符联接)时,似乎省略了{payersNumber: { $ne: usersPhoneNumber } }子句。

var userIdCode = Meteor.userId(); 
var phoneNumber = Meteor.users.findOne({_id: userIdCode }, { fields: { "profile.telephoneNumber": 1 } } ); 
var usersPhoneNumber = phoneNumber.profile.telephoneNumber; 

recipientsDetails.find( { $and: [ { payersNumber: usersPhoneNumber }, 
                                  { recipientNumber: usersPhoneNumber }, 
                                  { payersNumber: { $ne: usersPhoneNumber } }  
                                ] }).fetch();

由于被忽略的查询子句,上面的查询产生:

0
payersNumber: "+254700007633"
recipientNumber: "+254700007633"

1
payersNumber: "+254700007633"
recipientNumber: "+254700007633"

代替:

0
payersNumber: "+254700027685"
recipientNumber: "+254700007633"

1
payersNumber: "+254700007633"
recipientNumber: "+254700007633"

2
payersNumber: "+254700007633"
recipientNumber: "+254700007633"

有人可以解释一下为什么会发生这种情况,以及如何纠正我的查询吗?

1 个答案:

答案 0 :(得分:1)

基本上,您在下面的注释中指定的规则(假设我正确理解了这些规则)可以标准化为->“将所有文件退还给我作为付款人或收款人的地方。”

recipientsDetails.find( { $or: [ { payersNumber: usersPhoneNumber }, 
                                  { recipientNumber: usersPhoneNumber } 
                                ] }).fetch();

这应该返回usersPhoneNumber是收件人或付款人的文件。