sql >> Databáze >  >> NoSQL >> MongoDB

MongoDB zkopíruje pole do jiné kolekce s cizím klíčem

S nastavením testu je několik problémů:

  • Neodpovídají velikosti názvů polí (odkazujete na color místo Color při kopírování)
  • V cílové kolekci se shoduje pouze jeden z příkladů cizích klíčů:ObjectId('515f7db83f71d6bcb1c41a48')
  • Vaše aktualizace ovlivní pouze první odpovídající dokument pro „cizí klíč“. To by bylo v pořádku pro vztah 1:1, ale ne 1:mnoho

Opravený příklad zohledňující výše uvedené (kromě neodpovídajících klíčů):

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

Výsledkem je nastavení {color:blue} pro jediný cizí klíč, který se skutečně shoduje ve vzorových dokumentech:

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:řazení dokumentů podle objektů pole

  2. Jak aktualizovat vložený dokument v mongoose?

  3. Strategie pro agregace v reálném čase v MongoDB

  4. Redis :Jak nastavit, aby se jeden klíč rovnal hodnotě jiného klíče?