Какие логические операторы запросов следует использовать для объединения двух отдельных запросов?

Какие логические операторы запросов я использую для объединения ДВУХ запросов, дающих документы, принадлежащие вошедшему в систему пользователю Meteor.userId(); И все документы, в которых номер телефона вошедшего в систему пользователя указан в переменной recipientNumber.

Документ, содержащий номер телефона вошедших в систему пользователей в переменной recipientNumber, предполагает, что вошедшие в систему пользователи являются получателями средств.

Для справки ниже приведены сведения об пользователях, вошедших в систему:

var user = Meteor.userId();      
var userDetails = Meteor.users.findOne({_id: user}, { fields: { "profile.telephoneNumber": 1, "profile.name": 1 } } ); 

var usersNumber = userDetails.profile.telephoneNumber;
var userName = userDetails.profile.name;

console.log("Users _id is: " +user);
console.log("Users Number is: " +usersNumber);
console.log("Users Name is: " +userName);

Приведенный выше код правильно дает:

Users _id is: "sxY3fsY9LmJYqFkiG"
Users Number is: +254705086633
Users Name is: Sir.BT

recipientsDetails.find({ }).fetch(); показывает содержимое коллекции в теме:

0:
payersName: "The LucidOreo"
payersUserId: "KDJFGkCRF3E5nY37e"
recipientNumber: "+254705086633"
_id: "MMyinrcrrYpz2haxq"    
1:
payersName: "Sir.BT"
payersUserId: "sxY3fsY9LmJYqFkiG"
recipientNumber: "+254705086633"
_id: "YbPFT9ecCA4FTgqsn"

2:
payersName: "Sir.BT"
payersUserId: "sxY3fsY9LmJYqFkiG"
recipientNumber: "+254705577633"
_id: "ZPWNsQ7TWSJcERSJv"

Приведенный ниже запрос фильтрует коллекцию, чтобы отобразить только документы, принадлежащие пользователю, на основе пользователей Meteor.userId(): sxY3fsY9LmJYqFkiG.

var user = Meteor.userId(); 
recipientsDetails.find( {payersUserId: user} ).fetch();

Найдите ниже результаты:

0:
payersName: "Sir.BT"
payersUserId: "sxY3fsY9LmJYqFkiG"
recipientNumber: "+254705086633"
_id: "YbPFT9ecCA4FTgqsn"


1:
payersName: "Sir.BT"
payersUserId: "sxY3fsY9LmJYqFkiG"
recipientNumber: "+254705577633"
_id: "ZPWNsQ7TWSJcERSJv"

Я хотел бы сформулировать запрос, который показывает комбинацию ДВУХ вещей:

Все документы, принадлежащие вошедшему в систему пользователю (как показано в коде ниже):

var user = Meteor.userId(); 
recipientsDetails.find( {payersUserId: user} ).fetch();

... и все документы, содержащие номер телефона вошедшего в систему пользователя (также как показано в коде ниже):

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

 var usersNumber = userDetails.profile.telephoneNumber;

 recipientsDetails.find( {recipientNumber: usersNumber} ).fetch();

Какие логические операторы запросов следует использовать в запросе, чтобы получить это?

Я пробовал:

var user = Meteor.userId();

var userDetails = Meteor.users.findOne({_id: user}, { fields: { "profile.telephoneNumber": 1 } } ); 

var usersNumber = userDetails.profile.telephoneNumber; 

recipientsDetails.find( { $and: [{payersUserId: user},  {recipientNumber: usersNumber }  ] }  ).fetch();

К сожалению, это ошибочно дает:

0:
payersName: "Sir.BT"
payersUserId: "sxY3fsY9LmJYqFkiG"
recipientNumber: "+254705086633"
_id: "YbPFT9ecCA4FTgqsn"

1:
payersName: "Sir.BT"
payersUserId: "sxY3fsY9LmJYqFkiG"
recipientNumber: "+254705577633"
_id: "ZPWNsQ7TWSJcERSJv"

... и пропускает:

payersName: "The LucidOreo"
payersUserId: "KDJFGkCRF3E5nY37e"
recipientNumber: "+254705086633"
_id: "MMyinrcrrYpz2haxq"

...который явно содержит recipientNumber: "+254705086633" номер пользователя, вошедшего в систему.

Чтобы уточнить, желаемый доход будет:

0:
payersName: "The LucidOreo"
payersUserId: "KDJFGkCRF3E5nY37e"
recipientNumber: "+254705086633"
_id: "MMyinrcrrYpz2haxq"    
1:
payersName: "Sir.BT"
payersUserId: "sxY3fsY9LmJYqFkiG"
recipientNumber: "+254705086633"
_id: "YbPFT9ecCA4FTgqsn"

2:
payersName: "Sir.BT"
payersUserId: "sxY3fsY9LmJYqFkiG"
recipientNumber: "+254705577633"
_id: "ZPWNsQ7TWSJcERSJv"

Может ли кто-нибудь объяснить мне, почему это не учтено и как лучше сформулировать запрос по теме?


person SirBT    schedule 16.01.2019    source источник
comment
Если я понял ваше требование, я думаю, что это должно сработать, если вы замените «$ и» на «$ или». Это вернет все документы, которые соответствуют идентификатору пользователя-плательщика или номеру-получателя.   -  person Mo A    schedule 16.01.2019


Ответы (1)


Я считаю, что это должно работать, если вы замените следующее:

recipientsDetails.find( { $and: [{payersUserId: user},  {recipientNumber: usersNumber }  ] }  ).fetch();

с

recipientsDetails.find( { $or: [{payersUserId: user},  {recipientNumber: usersNumber }  ] }  ).fetch();
person Mo A    schedule 16.01.2019