【发布时间】:2021-11-10 22:34:56
【问题描述】:
我有以下收藏
{
"Id" : "12345-7",
},
"Stock" : [
{
"Code" : "1",
"Qty" : 5.0
},
{
"Code" : "3",
"Qty" : 7.0
}
]
}
{
"Id" : "22222-0",
"Stock" : [
{
"Code" : "3",
"Qty" : 10.0
},
{
"Code" : "10",
"Qty" : 2.0
}
]
}
我有这个清单:
{1 , 10}
我的预期输出是:
Id : 12345-7
Code: 1
Availability : in stock
Id : 12345-7
Code: 10
Availability : out of stock
Id : 12345-7
Code: 1
Availability : out of stock
Id : 12345-7
Code: 10
Availability : out of stock
基本上,如果Stock.Code 中不存在列表的值,我需要使用列表的值生成一个文档。预期输出的最后一个文档是out of stock,因为有一个规则是in stock if Qty >= 3
我试过了
db.Collection.aggregate([
{
"$unwind" : "$Stock"
},
{
"$match" :
{
"$in" : ["Stock.Code", list]
}
},
{
"$projoect" :
{
"Id" : "$Id",
"Code" : "$Stock.Code",
"Availability" :
{
"$cond"
...
}
}
}
])
我的疑惑是:
- 我可以只使用一个聚合来做到这一点吗?
- 最好的方法是什么?我正在使用 pyMongo 进行编码,最好在数据库端或代码端执行此操作
- 如何更改我的聚合
Code和Condition以匹配我的预期输出?
【问题讨论】:
-
你确定这不是一个错误吗?编号:12345-7 代码:10 可用性:有货,12345-7 根本没有代码 10
-
@Takis_ 这是一个错字,我已经编辑了答案,现在是正确的!谢谢
-
下面的答案对你有用吗?这就是你需要的?
-
我现在测试一下,等我写完我就在这里发帖,等会儿
-
我的收藏中有 2kk 个寄存器
标签: mongodb aggregation-framework aggregate