gpt4 book ai didi

node.js - 使用聚合查询获取具有总交易计数和交易明细的用户列表作为嵌入式文档

转载 作者:可可西里 更新时间:2023-11-01 10:45:50 25 4
gpt4 key购买 nike

我正在尝试获取具有总交易计数的用户列表,并且每个用户都应该使用 MongoDB 的聚合管道将最新的交易详细信息作为嵌入式对象以在 GET API 中获取结果。

我有以下数据库架构:

用户:_id、姓名、电话、地址

产品:_id、名称、单价、描述

交易:_id, date, product_id(ref to Product), user_id(ref to User), quantity, total_price


预期响应 JSON

[
{
name:"",
phone:"",
address:"",
total_transaction:
latest_transaction_detail: {
product_id:
quantity:
total_price:
}
},
{
name:"",
phone:"",
address:"",
total_transaction:
latest_transaction_detail: {
product_id:
quantity:
total_price:
}
}
]

如何生成聚合查询以返回上述内容?

最佳答案

您可以通过运行聚合查询来实现这一点。

  • 查找阶段会将您的 User 集合与您的 Transaction 集合结合起来(无需在您的预期结果中结合 Product)。它的管道被 $facet 拆分,用于获取该用户的计数结果和最新交易

  • 项目阶段将 reshape 您的数据并将数组元素提取到文档中。

下面是这样一个查询:

db.User.aggregate(
[
{
$lookup:
{
from: "Transaction",
let: { userId: "$_id" },
pipeline: [
{$facet:
{count:[{$match:{$expr:{$eq:["$$userId","$user_id"]}}}, {$count:"total_transaction"}],
latest:[
{$match:{$expr:{$eq:["$$userId","$user_id"]}}},
{$sort:{date:-1}},
{$limit:1}]
} }],
as: "transactions"
}
},
{
$project: {
last_name:1,
phone:1,
address:1,
total_transaction : {
$let:{
vars:{
count:{
$arrayElemAt:["$transactions.count",0]
}
},
in:{
$arrayElemAt:["$$count.total_transaction",0]
}
}
},
latest_transaction : {
$let:{
vars:{
latest:{
$arrayElemAt:["$transactions.latest",0]
}
},
in:{
$arrayElemAt:["$$latest",0]
}
}


},
}
},
]
);

关于node.js - 使用聚合查询获取具有总交易计数和交易明细的用户列表作为嵌入式文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52625453/

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