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

Mongodb 如何使用$and逻辑查询运算符应用于所有三个查询子句?,mongodb,meteor,mongodb-query,Mongodb,Meteor,Mongodb Query,虽然我正在使用$和逻辑查询运算符连接多个查询子句,但$和逻辑查询运算符似乎忽略了其中一个查询子句。有人能解释一下我的问题哪里出错了吗 在subjectrecipientsDetails.Find({}).fetch()中查找文档的相关内容: 当下面的查询(由$和逻辑查询运算符连接在一起)运行时,它似乎忽略了{payersNumber:{$ne:usersPhoneNumber}子句 var userIdCode = Meteor.userId(); var phoneNumber = Mete

虽然我正在使用
$和
逻辑查询运算符连接多个查询子句,但
$和
逻辑查询运算符似乎忽略了其中一个查询子句。有人能解释一下我的问题哪里出错了吗

在subject
recipientsDetails.Find({}).fetch()中查找文档的相关内容

当下面的查询(由
$和
逻辑查询运算符连接在一起)运行时,它似乎忽略了
{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();
由于忽略了query子句,上述查询将生成:

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"

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

基本上,您在下面的评论中指定的规则(假设我理解正确)可以正常化为->“返回我作为付款人或接收人的所有文档”


这将返回
usersPhoneNumber
是收件人或付款人的文档。

感谢您的快速响应,但是您的解决方案不起作用。更改为您建议的查询,该查询现在只生成:
0 PayrsNumber:+254700027685“recipientNumber:+25470007633”
@SirBT如果我理解正确,您希望仅基于“recipientNumber”返回。尝试更新的代码。否则,您所追求的逻辑是什么?为了解释其背后的逻辑,集合条款文档应该反映一个移动货币交易语句,其中我的编号
usersPhoneNumber
为:1。将钱的发送者发送到任意随机数
接收者号码
,2。发送者和接收者都是
接收者编号
,3。除了我的
usersPhoneNumber
之外,从随机数字
payersNumber
中获得金钱的接收者。我希望这能让您对其背后的逻辑有一些清晰的认识?是的,您的查询解决方案工作得非常完美,尽管从逻辑上讲,它没有任何意义!我认为这里使用的最合乎逻辑的操作应该是$AND。你能解释一下背后的逻辑吗?谢谢你的确认。考虑到您正在寻找一个“满足所提供的3个条件中的任何一个”的查询,
$或
是最合适的运算符(即满足任何=
$或
,满足所有=
$和
)。
0
payersNumber: "+254700027685"
recipientNumber: "+254700007633"

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

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