Chuyển đổi giá trị đơn sang mảng với forEach() và $set
Khi cần chuyển đổi một trường từ giá trị đơn (string, number) sang mảng, bạn có thể duyệt qua từng document và cập nhật bằng $set bên trong forEach().
Dữ liệu ban đầu
> db.demo18.insertOne({"StudentName": "John"});
> db.demo18.find();
{ "_id": ObjectId("..."), "StudentName": "John" }
Thực hiện chuyển đổi
> db.demo18.find().forEach(function(myDocument) {
db.demo18.update(
{ _id: myDocument._id },
{ "$set": { "StudentName": [myDocument.StudentName] } }
);
});
Kết quả sau cập nhật
> db.demo18.find();
{ "_id": ObjectId("..."), "StudentName": [ "John" ] }
Lưu ý quan trọng: Cách này phù hợp cho collection nhỏ. Với dữ liệu lớn, hãy sử dụng updateMany() kết hợp pipeline aggregation (MongoDB 4.2+) để hiệu quả hơn:
> db.demo18.updateMany(
{},
[{ $set: { StudentName: ["$StudentName"] } }]
);