Il y a plusieurs problèmes avec la configuration de votre test :
- La casse des noms de champs ne correspond pas (vous faites référence à la
color
au lieu deColor
lors de la copie) - Un seul des exemples de clés étrangères correspond à la collection cible :
ObjectId('515f7db83f71d6bcb1c41a48')
- Votre mise à jour n'affectera que le premier document correspondant à la "clé étrangère". Ce serait bien pour une relation 1:1, mais pas pour une relation 1:plusieurs
Un exemple corrigé tenant compte de ce qui précède (mis à part les clés qui ne correspondent pas) :
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
);
}
);
Ce qui se traduit par la définition de {color:blue}
pour la seule clé étrangère qui correspond réellement dans les exemples de documents :
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")
}