我正在嘗試在貓鼬中完成以下任務:
說我有以下收藏
{
"_id": {
"$oid": "111"
},
"email": "[email protected]",
"givenName": "xxx",
"familyName": "xxx",
"favoriteProducts": [{
"soldTo": "33040404",
"skus": ["W0541", "W2402"]
}, {
"soldTo": "1223",
"skus": ["12334"]
}]
}
我希望能夠根據 soldTo 和 _id 將 sku 添加到最喜歡的產品陣列中。這樣做時有兩種可能的情況。
一種。在 favoriteProducts 中已經有一個具有給定 soldTo 的物件,在這種情況下,只需將 sku 添加到陣列中。(例如,將 sku '12300' 添加到 soldTo '1223' for id '111')
灣。給定的 soldTo 還沒有物件,在這種情況下,需要使用給定的 sku 和 soldTo 創建該物件。(例如將 sku '123' 添加到 soldTo '321' for id '111')
到目前為止,我已經做到了這一點,但我覺得有一種方法可以在一個查詢中做到這一點。
private async test() {
const soldTo = '1223';
const sku = '12300';
const id = '111';
const hasFavoriteForSoldTo = await userModel.exists({
_id: id,
'favoriteProducts.soldTo': soldTo,
});
if (!hasFavoriteForSoldTo) {
await userModel
.updateOne(
{
_id: id,
},
{ $addToSet: { favoriteProducts: { skus: [sku], soldTo } } },
)
.exec();
} else {
await userModel
.updateOne(
{
_id: id,
'favoriteProducts.soldTo': soldTo,
},
{ $addToSet: { 'favoriteProducts.$.skus': sku } }
)
.exec();
}
}
uj5u.com熱心網友回復:
使用update-documents-with-aggregation-pipeline
看看下面的 mongo 游樂場。不確定您想要Output 1還是Output 2。
輸出 1
db.collection.update({
_id: { "$oid": "111222333444555666777888" }
},
[
{
$set: {
favoriteProducts: {
$cond: {
if: { $in: [ "1223", "$favoriteProducts.soldTo" ] },
then: {
$map: {
input: "$favoriteProducts",
as: "f",
in: {
$cond: {
if: { $eq: [ "1223", "$$f.soldTo" ] },
then: { $mergeObjects: [ "$$f", { skus: [ "12300" ] } ] },
else: "$$f"
}
}
}
},
else: {
$concatArrays: [ "$favoriteProducts", [ { skus: [ "12300" ], soldTo: "1223" } ] ]
}
}
}
}
}
],
{
multi: true
})
mongoplayground
輸出 2
db.collection.update({
_id: { "$oid": "111222333444555666777888" }
},
[
{
$set: {
favoriteProducts: {
$cond: {
if: { $in: [ "1223", "$favoriteProducts.soldTo" ] },
then: {
$map: {
input: "$favoriteProducts",
as: "f",
in: {
$cond: {
if: { $eq: [ "1223", "$$f.soldTo" ] },
then: {
$mergeObjects: [
"$$f",
{ skus: { $concatArrays: [ [ "12300" ], "$$f.skus" ] } }
]
},
else: "$$f"
}
}
}
},
else: {
$concatArrays: [ "$favoriteProducts", [ { skus: [ "12300" ], soldTo: "1223" } ] ]
}
}
}
}
}
],
{
multi: true
})
mongoplayground
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/465230.html
標籤:javascript mongodb 猫鼬
上一篇:帶有$group和$project的Mongodb視圖
下一篇:嵌套陣列中的MongoDB查找
