我有兩個收藏:
{
"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庫存,則該產品的可用性是“缺貨”。所有商店都需要有最低數量MinQty的庫存( )。
我使用查找、展開并再次加入展開的資料來做到這一點。
有沒有一種簡單的方法可以使用 $condStock在第一個集合中迭代:
uj5u.com熱心網友回復:
如果我理解正確,您可以嘗試以下查詢:
- 首先
$lookup按sku值“加入”欄位。 - 然后是
$project輸出您想要的值的階段。 - 使用
$cond可以添加階段的位置$gte,$max和$min。
如果我沒記錯的話,邏輯是:“如果 ( $cond) 庫存中的最小 ( $min) 數量大于或等于 ( $gte) 中的最大 ( $max) 數量,MinQty則為“有貨”,否則為“缺貨”。
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"
}
}
}
}
])
這里的例子
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/450662.html
