sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoDB kopiera ett fält till en annan samling med en främmande nyckel

Det finns flera problem med din testkonfiguration:

  • Fältnamn stämmer inte överens (du hänvisar till color istället för Color vid kopiering)
  • Endast en av exemplen på främmande nycklar matchar i målsamlingen:ObjectId('515f7db83f71d6bcb1c41a48')
  • Din uppdatering kommer bara att påverka det första matchande dokumentet för "främmande nyckel". Det här skulle vara bra för ett 1:1-förhållande, men inte ett 1:många

Ett korrigerat exempel med hänsyn till ovanstående (bortsett från de icke-matchande nycklarna):

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

Vilket resulterar i att {color:blue} ställs in för den enda främmande nyckel som faktiskt matchar i exempeldokumenten:

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:räkna antalet objekt i en array

  2. Ofångat undantag 'MongoConnectionException'

  3. MongoDB reparationskommando misslyckades

  4. MongoDB-fråga som jämför 2 fält i samma samling utan $where