我应该使用什么“逻辑查询运算符”来合并两个单独的查询?

时间:2019-01-16 11:10:54

标签: meteor mongodb-query meteor-accounts

我要使用哪些逻辑查询运算符来加入 两个 查询,从而产生属于已登录用户< / strong> 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"

任何人都可以向我解释为什么忽略了这一点以及如何更好地制定主题查询吗?

1 个答案:

答案 0 :(得分:1)

我相信,如果您替换以下内容,它应该会起作用:

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

使用

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