Node.js 使用自定义筛选器从多个表中获取Mongodb数据
我正在从Mongodb获取这样的数据Node.js 使用自定义筛选器从多个表中获取Mongodb数据,node.js,mongodb,Node.js,Mongodb,我正在从Mongodb获取这样的数据 orders = await ordersCollection .find(rest) .sort({ dateAdded: -1 }) .skip(parseInt(skip)) .limit(parseInt(limit)) .toArray(); 此查询返回订单集合中的数据。但是在orders集合中,我有一个userID和一个users表。每个用户的Id都与电子邮件等其他数据一起列出。我需要那个电子邮件字段。怎么可能呢?我尝试了$look
orders = await ordersCollection
.find(rest)
.sort({ dateAdded: -1 })
.skip(parseInt(skip))
.limit(parseInt(limit))
.toArray();
此查询返回订单集合中的数据。但是在orders集合中,我有一个userID和一个users表。每个用户的Id都与电子邮件等其他数据一起列出。我需要那个电子邮件字段。怎么可能呢?我尝试了$lookup和aggregate,但还没有成功。也许还有其他一些技术可以用于过滤器,比如排序、跳过、限制
这是两个系列的外观
订单收集
{"_id":"5d7f276d86250800408856c5","type":"admin-credit",
"userId":"5d7f074644de5a00b1c0d5c6",
"fromAccount":"",
"toAccount":"AUD",
"amount":20,"fee":0,
"quote":null,
"linkId":null,
"dateAdded":"2019-09-16T06:10:53.554Z",
"dateApproved":"2019-09-16T06:10:53.614Z",
"orderStatus":"approved",
"adminId":"5d7f05b71450370072212b89"}
{"_id":"5d7f074644de5a00b1c0d5c6",
"email":"pardeep889@hotmail.com",
"hash":"$2a$10$ocdE3gwsGZR8N5Yauhg1MeKIU11UkKrHynnYWB24x/TWR2WhM/nIu",
"confirmationToken":"e7e0ca1a-cc73-4691-8472-"
"ipAddrs":[{"ip":"192.180.2.15",
"date":"2019-09-16T03:54:03.972Z"}],
"socketToken":"c6a7fc7c-f983-439a-bafa-e93618e0a4e8"
}
用户集合
{"_id":"5d7f276d86250800408856c5","type":"admin-credit",
"userId":"5d7f074644de5a00b1c0d5c6",
"fromAccount":"",
"toAccount":"AUD",
"amount":20,"fee":0,
"quote":null,
"linkId":null,
"dateAdded":"2019-09-16T06:10:53.554Z",
"dateApproved":"2019-09-16T06:10:53.614Z",
"orderStatus":"approved",
"adminId":"5d7f05b71450370072212b89"}
{"_id":"5d7f074644de5a00b1c0d5c6",
"email":"pardeep889@hotmail.com",
"hash":"$2a$10$ocdE3gwsGZR8N5Yauhg1MeKIU11UkKrHynnYWB24x/TWR2WhM/nIu",
"confirmationToken":"e7e0ca1a-cc73-4691-8472-"
"ipAddrs":[{"ip":"192.180.2.15",
"date":"2019-09-16T03:54:03.972Z"}],
"socketToken":"c6a7fc7c-f983-439a-bafa-e93618e0a4e8"
}
我是如何获取数据的
orders = await ordersCollection
.find(rest)
.sort({ dateAdded: -1 })
.skip(parseInt(skip))
.limit(parseInt(limit))
.aggregate([
{
$lookup: {
from: "users",
localField: "user_id",
foreignField: "_id",
as: "new record"
}
}])
.toArray();
我需要订单的电子邮件字段 如果需要,可以在聚合管道中使用和。还要注意,我为过滤条件添加了:
db.orders.aggregate([
{ $match: {} },
{
$lookup: {
from: "users",
localField: "userId",
foreignField: "_id",
as: "userDoc"
}
},
{ $unwind: "$userDoc" },
{
$project: {
_id: 1,
type: 1,
userId: 1,
fromAccount: 1,
toAccount: 1,
amount: 1,
fee: 1,
quote: 1,
linkId: 1,
dateAdded: 1,
dateApproved: 1,
orderStatus: 1,
adminId: 1,
email: "$userDoc.email"
}
}
]);
注意:
$project
用于返回订单中的所有字段,并且仅返回加入的收款文档中的电子邮件。您能否确认订单收款中的用户ID的数据类型为objectId而不是sting。需要从users表中获取数据只需电子邮件每次工作正常我正在获取订单数据可能在一个在这些集合中,\u id
是ObjectID,其中一个是字符串。是这样,还是两者都是字符串?都是对象ID。您可以共享您尝试查找或填充的代码吗。