MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

MongoDB copie un champ dans une autre collection avec une clé étrangère

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 de Color 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")
}