मुझे यकीन नहीं है कि एक ही प्रश्न में ऐसा करने का कोई सीधा तरीका है,
एग्रीगेशन पाइपलाइन से अपडेट करें MongoDB v4.2 से शुरू,
$cond
नाम जांचने के लिएsubColl
. में है सरणी,- सच्ची स्थिति, मौजूदा वस्तु के साथ विलय करने की आवश्यकता है,
$map
लूप को पुनरावृत्त करने के लिए, स्थिति की जांच करें यदि स्थिति से मेल खाता है तो$mergeObjects
का उपयोग करके वर्तमान ऑब्जेक्ट के साथ नए डेटा ऑब्जेक्ट को मर्ज करें - झूठी स्थिति, सरणियों को संक्षिप्त करने की आवश्यकता है, वर्तमान
subColl
$concatArrays
. का उपयोग करके सरणी और नई वस्तु
const _id = 123;
const update = { name: 'John', other: 1000 };
Schema.findOneAndUpdate(
{ _id: _id },
[{
$set: {
subColl: {
$cond: [
{ $in: [update.name, "$subColl.name"] },
{
$map: {
input: "$subColl",
in: {
$cond: [
{ $eq: ["$$this.name", update.name] },
{ $mergeObjects: ["$$this", update] },
"$$this"
]
}
}
},
{ $concatArrays: ["$subColl", [update]] }
]
}
}
}]
)