sql >> Database >  >> NoSQL >> MongoDB

MongoDB kopieert een veld naar een andere verzameling met een externe sleutel

Er zijn verschillende problemen met uw testopstelling:

  • Geval van veldnamen komt niet overeen (u verwijst naar color in plaats van Color bij kopiëren)
  • Slechts een van de externe sleutels van het voorbeeld komt overeen in de doelverzameling:ObjectId('515f7db83f71d6bcb1c41a48')
  • Je update is alleen van invloed op het eerste overeenkomende document voor de "buitenlandse sleutel". Dit zou prima zijn voor een 1:1-relatie, maar niet voor een 1:veel

Een gecorrigeerd voorbeeld rekening houdend met het bovenstaande (afgezien van de niet-overeenkomende sleutels):

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

Wat resulteert in het instellen van {color:blue} voor de enige externe sleutel die daadwerkelijk overeenkomt in de voorbeelddocumenten:

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. 2 manieren om een ​​index zichtbaar te maken in MongoDB

  2. MongoDB-omgeving instellen | Installeer MongoDB op Windows

  3. Spring Data MongoDB - $eq binnen $projectondersteuning

  4. ScaleGrid kondigt gedeelde MongoDB-hosting aan op Amazon AWS