代码之家  ›  专栏  ›  技术社区  ›  SirBT

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

  •  0
  • SirBT  · 技术社区  · 6 年前

    虽然我用的是 $and 逻辑查询运算符,用于联接多个查询子句, 美元和 逻辑查询运算符似乎 忽略 查询子句之一。有人能解释一下我的问题在哪里吗?

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

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

    当下面的查询(由 美元和 逻辑查询运算符)运行时,它似乎忽略了 {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"
    

    而不是:

    零
    付款人编号:“+25470027685”
    收件人编号:“+254700007633”
    
    一
    付款人编号:“+254700007633”
    收件人编号:“+254700007633”
    
    二
    付款人编号:“+254700007633”
    收件人编号:“+254700007633”
    

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

    1 回复  |  直到 6 年前
        1
  •  1
  •   Mo A    6 年前

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

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

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