我试图用相同的goods_in和goods_out减去goods_info.name。我试过了,还在坚持,请帮帮我
[
{
"_id": "5f1aaa902f90f940a40546fe",
"goods_in": [
{
"goods_info": {
"name": "taro"
},
"quantity": 100
},
{
"goods_info": {
"name": "granita"
},
"quantity": 17
}
],
"goods_out": [
{
"goods_info": {
"name": "taro"
},
"quantity": 25
},
{
"goods_info": {
"name": "taro"
},
"quantity": 15
},
]
}
]期望产出:
[{"name":"taro","quantity":60},{"name":"granita","quantity":17}]有什么帮助吗。我试过小组等
发布于 2020-07-26 09:47:01
您可以使用此聚合,如果goods_ids可以在多个文档之间存在重复,则必须添加一个$group阶段,否则就会得到dup结果。
db.collection.aggregate([
{
$unwind: "$goods_in"
},
{
$project: {
name: "$name",
quantity: {
$subtract: [
"$goods_in.quantity",
{
$sum: {
$map: {
input: {
$filter: {
input: "$goods_out",
as: "good",
cond: {
$eq: [
"$$good.goods_info.name",
"$goods_in.goods_info.name"
]
}
}
},
as: "item",
in: "$$item.quantity"
}
}
}
]
}
}
}
])发布于 2020-07-26 10:57:59
通过aggregation和group,您可以处理它,通过组阶段您可以在out_value变量中推入out数量之和,然后在lookup同名的字段上用第一个集合加入结果。在聚合结束时,您可以减去in_value和out_value。
db.collection.aggregate(
[
{
"$unwind": "$goods_out"
},
{
"$group": {
"$_id": "goods_out.name", "out_value": {"$sum": "good_out.quantity"}
}
},
{
"$lookup": {
"from": "collection_name",
"let": {"name": "$_id", "out_value": "$out_value", "in_value": "$goods_in.quantity"},
"pipeline": [
{
"$unwind": "$goods_in"
},
{
"$match": {
"$expr":
{"$eq": ["$$goods_in.name", "$_id"]}
}}
],
"as": "goods_info"
}
},
{
"$unwind": "$goods_info"
},
{
"$project":{
"name": "$goods_info.name",
"quantity": {
"$subtract": ["$goods_info.in_value", "$goods_info.in_value"]
}
}
}
]
)https://stackoverflow.com/questions/63095476
复制相似问题