這里是 mongodb 開發新手。我正在嘗試撰寫一個更新查詢,在其中搜索某些產品的庫存并根據銷售的產品數量減少數量。我有一個產品串列,它是一個物件串列,它包含正在銷售的產品。
products= [
{
product: "*some product id*",
quantity: "*some quantity*"
}
]
我從上面的串列中提取產品 ID 到一個 productIds 串列中。下面是我的查詢的樣子。我已經意識到我不能將“$product”[股票的一個欄位] 傳遞到 indexof() 中,有沒有辦法使用帶有聚合管道的更新來處理這個問題?如果沒有,我還有什么其他選擇?我已經搜索了檔案,但找不到任何有用的東西。
Stock.updateOne(
{
product: { $in: productIds },
quantity: { $gt: 0 },
},
[
{
$set: {
newQuantity: {
$subtract: [
"$quantity",
products[productIds.indexOf("$product")].quantity,
],
},
},
},
],
);
uj5u.com熱心網友回復:
詢問
$reduce找出要減去的數量- listQuantity 將是那個數量,產品與串列的產品進行比較,如果匹配,我們得到數量(作為減少結果)
- 而不是
"input": [{"product":1, "quantity":3}, {"product":2, "quantity":4}]使用"input": YOUR_JS_ARRAY_VARIABLE - 然后從之前的數量中減去這個數量
- productIds
[1,2]在本例中只能是
測驗代碼在這里
Stock.update(
{
"product": { "$in": productIds },
"quantity": { "$gt": 0 },
}
,
[{"$set":
{"listQuantity":
{"$reduce":
{"input":
[{"product":1, "quantity":3}, {"product":2, "quantity":4}],
"initialValue":-1,
"in":
{"$cond":
[{"$and":
[{"$eq":["$$value", -1]},
{"$eq":["$$this.product", "$product"]}]},
"$$this.quantity", "$$value"]}}}}},
{"$set":
{"quantity":
{"$cond":
[{"$eq":["$listQuantity", -1]}, "$quantity",
{"$subtract":["$quantity", "$listQuantity"]}]},
"listQuantity":"$$REMOVE"}}])
uj5u.com熱心網友回復:
這是我用來撰寫查詢的 Order Collection 資料集的示例
{
"name" : "Order 2",
"products" : [
{"idProduct" : "61c5ec036d9383e03e62d8ae" , "quantity" : 6 },
{"idProduct" : "61c5ebee6d9383e03e62d8ac" , "quantity" : 2 } ]
}
這是我在 Order Collection 上的匯總,用于更新 Product Collection 上的產品
[{$unwind: {
path: "$products"
}}, {$lookup: {
from: 'Product',
localField: 'products.idProduct',
foreignField: '__id',
as: 'productsToAdjust'
}}, {$unwind: {
path: "$productsToAdjust"
}}, {$set: {
"productsToAdjust.quantity": { $subtract :["$productsToAdjust.quantity","$products.quantity"] }
}}, {$replaceRoot: {
newRoot: "$productsToAdjust"
}}, {$merge: {
into: 'Product',
on: '__id',
whenMatched: 'merge',
whenNotMatched: 'fail'
}}]
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/391893.html
下一篇:MongoDB嵌套查詢問題:未捕獲的例外:SyntaxError:missing:afterpropertyid:
