आपके परीक्षण सेट अप में कई समस्याएं हैं:
- फ़ील्ड नामों का मामला मेल नहीं खाता (आप
color
का संदर्भ दे रहे हैं के बजायColor
कॉपी करते समय) - केवल एक उदाहरण विदेशी कुंजी लक्ष्य संग्रह में मेल खाता है:
ObjectId('515f7db83f71d6bcb1c41a48')
- आपका अपडेट केवल "विदेशी कुंजी" के लिए पहले मेल खाने वाले दस्तावेज़ को प्रभावित करेगा। यह 1:1 संबंध के लिए ठीक होगा, लेकिन 1:अनेक के लिए नहीं
उपरोक्त को ध्यान में रखते हुए एक सही उदाहरण (गैर-मिलान कुंजियों को छोड़कर):
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
);
}
);
जिसके परिणामस्वरूप {color:blue}
setting सेटिंग होती है एकमात्र विदेशी कुंजी के लिए जो वास्तव में नमूना दस्तावेज़ों में मेल खाती है:
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")
}