आप नीचे एग्रीगेशन पाइपलाइन को 3.4
. में आज़मा सकते हैं संस्करण।
नीचे एकत्रीकरण स्टोर्स
को बदलता है $objectToArrayका उपयोग करके कुंजी मान जोड़े की सरणी में एम्बेडेड दस्तावेज़ कोड>
उसके बाद $map
सभी मौजूदा क्षेत्रों को रखते हुए नए क्षेत्र के साथ रूपांतरित सरणी को आउटपुट करने के लिए।
नई स्टोर संरचना लिखने के लिए बल्क अपडेट।
var bulk = db.getCollection(col).initializeUnorderedBulkOp();
var count = 0;
var batch = 1;
db.getCollection(col).aggregate([
{"$match":{"store_affiliation.stores":{"$ne":{"$type":4}}}},
{"$addFields":{
"stores":{
"$map":{
"input":{"$objectToArray": "$store_affiliation.stores"},
"in":{
"store_code":"$$this.k",
"role":"$$this.v.role",
"startdate":"$$this.v.startdate",
"enddate":"$$this.v.enddate",
"permissions":"$$this.v.permissions"
}
}
}
}}]).forEach(function(doc){
var _id = doc._id;
var stores = doc.stores;
bulk.find({ "_id" : _id }).updateOne(
{ $set: {"store_affiliation.stores" : stores} }
);
count++;
if (count == batch) {
bulk.execute();
bulk = db.getCollection(col).initializeUnorderedBulkOp();
count = 0;
}
});
if (count > 0) {
bulk.execute();
}