MongoDB 4.4 में शुरू, $merge उसी संग्रह में आउटपुट कर सकते हैं जिसे एकत्र किया जा रहा है:
db.products.aggregate([
{ /**
* from: The target collection.
* localField: The local join field.
* foreignField: The target join field.
* as: The name for the results.
* pipeline: The pipeline to run on the joined collection.
* let: Optional variables to use in the pipeline field stages.
*/
$lookup: {
from: 'events',
localField: '_id',
foreignField: 'product_id',
as: 'events'
}},
{/**
* into: The target collection.
* on: Fields to identify.
* whenMatched: Action for matching docs.
* whenNotMatched: Action for non-matching docs.
*/
$merge: {
into: 'products',
on: "_id",
whenMatched: 'merge',
whenNotMatched: 'insert'
}}
])
जागरूक रहें: जब $ merge उसी संग्रह में आउटपुट करता है जिसे एकत्रित किया जा रहा है, तो दस्तावेज़ कई बार अपडेट हो सकते हैं या ऑपरेशन के परिणामस्वरूप अनंत लूप हो सकता है। अधिक विवरण यहां https://docs .mongodb.com/manual/reference/operator/aggregation/merge/#merge-behavior-same-Collection
यदि यह एक बार का अपडेट है तो आप यह सुनिश्चित करने के लिए पहले चरण के रूप में प्रारंभिक फ़िल्टर जोड़कर पाइपलाइन की सुरक्षा कर सकते हैं कि दस्तावेज़ एक बार ठीक से अपडेट किया गया है:
{ $match: { events: { $exists: false } }