Có một số vấn đề với thiết lập thử nghiệm của bạn:
- Trường hợp tên trường không khớp (bạn đang tham chiếu đến
color
thay vìColor
khi sao chép) - Chỉ một trong các khóa ngoại mẫu phù hợp trong tập hợp đích:
ObjectId('515f7db83f71d6bcb1c41a48')
- Cập nhật của bạn sẽ chỉ ảnh hưởng đến tài liệu phù hợp đầu tiên cho "khóa ngoại". Điều này sẽ tốt cho mối quan hệ 1:1, nhưng không tốt cho mối quan hệ 1:nhiều
Một ví dụ đã sửa có tính đến những điều trên (trừ các khóa không khớp):
db.test1.User.find().forEach(
function(x) {
db.test2.Car.update(
// query
{ userID: x._id },
// update
{ $set: { color: x.Color} },
// options:
{ "multi" : true } // Update all matching documents
);
}
);
Kết quả là cài đặt {color:blue}
cho khóa ngoại duy nhất thực sự khớp trong tài liệu mẫu:
db.test2.Car.find()
{
"_id" : ObjectId("515f84883f71d6bcb1c41a55"),
"speed" : 202,
"userID" : ObjectId("515f7db83f71d6bcb1c41a49")
}
{
"_id" : ObjectId("515f84883f71d6bcb1c41a56"),
"speed" : 193,
"userID" : ObjectId("515f7db83f71d6bcb1c41a4a")
}
{
"_id" : ObjectId("515f84883f71d6bcb1c41a54"),
"color" : "blue",
"speed" : 291,
"userID" : ObjectId("515f7db83f71d6bcb1c41a48")
}