Tổng hợp MongoDB không được phép thay đổi kiểu dữ liệu hiện có của các trường nhất định. Trong trường hợp này, bạn nên tạo một số mã lập trình để chuyển đổi string
thành int
. Kiểm tra mã bên dưới
db.collectionName.find().forEach(function(data) {
db.collectionName.update({
"_id": data._id,
"moop": data.moop
}, {
"$set": {
"PartnerID": parseInt(data.PartnerID)
}
});
})
Nếu kích thước bộ sưu tập của bạn lớn hơn thì tập lệnh trên sẽ làm chậm hiệu suất, đối với perfomace mongo cung cấp hoạt động hàng loạt mongo, sử dụng hoạt động hàng loạt mongo cũng được cập nhật kiểu dữ liệu
var bulk = db.collectionName.initializeOrderedBulkOp();
var counter = 0;
db.collectionName.find().forEach(function(data) {
var updoc = {
"$set": {}
};
var myKey = "PartnerID";
updoc["$set"][myKey] = parseInt(data.PartnerID);
// queue the update
bulk.find({
"_id": data._id
}).update(updoc);
counter++;
// Drain and re-initialize every 1000 update statements
if (counter % 1000 == 0) {
bulk.execute();
bulk = db.collectionName.initializeOrderedBulkOp();
}
})
// Add the rest in the queue
if (counter % 1000 != 0) bulk.execute();
Điều này về cơ bản làm giảm số lượng các câu lệnh hoạt động được gửi đến máy chủ để chỉ gửi một lần sau mỗi 1000 hoạt động được xếp hàng đợi.