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
$和逻辑查询运算符连接多个查询子句,但$和逻辑查询运算符似乎忽略了其中一个查询子句。有人能解释一下我的问题哪里出错了吗
在subjectrecipientsDetails.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();