Как использовать $ и оператор логического запроса, чтобы применить ко всем трем предложениям запроса? - PullRequest
0 голосов
/ 30 января 2019

Хотя я использую оператор логического запроса $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 голосов
/ 30 января 2019

По сути, правила, которые вы указали в комментариях ниже (при условии, что я их правильно понял), можно нормализовать до -> «Вернуть все документы, где я являюсь плательщиком или получателем».

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

Этодолжны вернуть документы, где usersPhoneNumber является либо получателем, либо плательщиком.

...