sql >> Database teknologi >  >> NoSQL >> MongoDB

MongoDB kopierer et felt til en anden samling med en fremmednøgle

Der er flere problemer med din testopsætning:

  • Tilfælde af feltnavne stemmer ikke overens (du henviser til color i stedet for Color ved kopiering)
  • Kun én af eksemplerne på fremmednøgler matcher i målsamlingen:ObjectId('515f7db83f71d6bcb1c41a48')
  • Din opdatering vil kun påvirke det første matchende dokument for "fremmednøglen". Dette ville være fint for et 1:1-forhold, men ikke et 1:mange

Et korrigeret eksempel, der tager højde for ovenstående (bortset fra de ikke-matchende nøgler):

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
        );
    }
);

Hvilket resulterer i indstilling af {color:blue} for den eneste fremmednøgle, der faktisk matcher i eksempeldokumenterne:

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


  1. MongoDB $oid vs ObjectId

  2. Hentning af mongoDB-referencer tager tid

  3. Hvordan opretter man forbindelse til MongoDB i Windows?

  4. MongoDB/Meteor:Tilføj unikt ID til hvert array-element