使用 mongo $cond 聚合在第一次出现的值中生成一个新字段
Use mongo $cond aggregator to generate a new field in the first occurrance of a value
我有两个合集:
{
"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
) 的库存。
我使用查找、展开并再次加入展开的数据来完成此操作。
有没有一种简单的方法可以使用 $cond 在第一个集合中遍历 Stock
:
如果我没理解错你可以试试这个查询:
- 首先
$lookup
按 sku
值“加入”字段。
- 然后一个
$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"
}
}
}
}
])
示例here
我有两个合集:
{
"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
) 的库存。
我使用查找、展开并再次加入展开的数据来完成此操作。
有没有一种简单的方法可以使用 $cond 在第一个集合中遍历 Stock
:
如果我没理解错你可以试试这个查询:
- 首先
$lookup
按sku
值“加入”字段。 - 然后一个
$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"
}
}
}
}
])
示例here