gpt4 book ai didi

node.js - 使用自定义过滤器从多个表中获取 Mongodb 数据

转载 作者:太空宇宙 更新时间:2023-11-03 23:13:53 26 4
gpt4 key购买 nike

我像这样从 Mongodb 获取数据。

 orders = await ordersCollection
.find(rest)
.sort({ dateAdded: -1 })
.skip(parseInt(skip))
.limit(parseInt(limit))
.toArray();

此查询返回订单集合中的数据。但在订单集合中,我有一个用户 ID 和用户表。每个用户的 _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"
}

我如何尝试获取数据。

   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();

我需要订单中的电子邮件字段。

最佳答案

可以使用$sort$limit如果需要的话,在聚合管道中。另请注意,我添加了 $match过滤条件:

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 用于返回 orders 中的所有字段,并且仅返回已加入集合文档中的电子邮件。

关于node.js - 使用自定义过滤器从多个表中获取 Mongodb 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57951874/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com