Bạn có thể thử đường dẫn tổng hợp bên dưới trong 3.4
phiên bản.
Tổng hợp dưới đây thay đổi cửa hàng
nhúng tài liệu vào mảng các cặp giá trị khóa bằng cách sử dụng $ objectToArray
theo sau là $ map
để xuất mảng đã biến đổi với trường mới trong khi vẫn giữ tất cả các trường hiện có.
Cập nhật hàng loạt để viết cấu trúc cửa hàng mới.
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();
}