我有两个集合:
{
"Sku" : "A",
"Stock" : [
{
"StoreCode" : "1",
"Qty" : 3
}
]
},
{
"Sku" : "B",
"Stock" : [
{
"StoreCode" : "1",
"Qty" : 3
},
{
"StoreCode" : "2",
"Qty" : 5
},
{
"StoreCode" : "10",
"Qty" : 7
}
]
}
和
{
"Sku" : "A",
"MinQty" : 2
}
{
"Sku" : "B",
"MinQty" : 5
}
我如何聚合这两个集合以获得以下预期输出:
{
"Sku" : "A",
"Availability" : "in stock"
}
{
"Sku" : "B",
"Availability" : "out of stock"
}
基本上,如果特定SKU的一个商店没有库存MinQty
,则产品的可用性为"1";缺货";。所有商店都需要最低库存量(MinQty
(。
我使用查找、展开和再次连接未绑定的数据来完成此操作。
有没有一种简单的方法可以使用$cond迭代第一个集合中的Stock
来做到这一点:
如果我理解正确,您可以尝试以下查询:
- 第一个CCD_;加入";字段乘以CCD_ 5值
- 然后一个
$project
阶段来输出您想要的值 - 使用
$cond
可以添加阶段$gte
、$max
和$min
如果我没有错,逻辑是:";如果($cond
(库存中的最小($min
(数量大于或等于($gte
(MinQty
中的最大($max
(数量;库存";,否则";缺货";。
db.collA.aggregate([
{
"$lookup": {
"from": "collB",
"localField": "Sku",
"foreignField": "Sku",
"as": "skus"
}
},
{
"$project": {
"_id": 0,
"Sku": 1,
"Availability": {
"$cond": {
"if": {
"$gte": [
{
"$min": "$Stock.Qty"
},
{
"$max": "$skus.MinQty"
}
]
},
"then": "in stock",
"else": "out of stock"
}
}
}
}
])
示例