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

Mongodb aktualizuje konkrétní prvek z podpole

Problém ve vašem kódu je dot-notation protože když zadáte tečkovou notaci, předpokládáte, že zadaná kritéria filtru musí odpovídat jedinému prvku pole, který splňuje všechna kritéria. Ale není. Tečkový zápis na polích může vyzvednout jakýkoli prvek pole, pokud se shoduje jedno kritérium. Proto dostáváte neočekávanou aktualizaci.

Musíte použít $elemMatch aby odpovídaly všem filtrům v array živel.

db.coll.update({
'_id' : 28,
n: { 
   $elemMatch:{
       a : new ObjectId('4ef85a3e46b3b84408000000'),
       c : 28 }
   }
},
{
  $push : {
     'n.$.p' : ObjectId("4b97e62bf1d8c7152c9ccb74")
  },
  $set : {
     'n.$.t' : ISODate("2013-05-13T14:22:46.777Z")
  }
})

a výstup je

    {
        "a" : ObjectId("4ef85a3e46b3b84408000000"),
        "c" : 28,
        "p" : [
            ObjectId("4f00631046b3b85002000000"),
            ObjectId("4b97e62bf1d8c7152c9ccb74")
        ],
        "t" : ISODate("2013-05-13T14:22:46.777Z"),
        "u" : 26
    }



  1. Aktualizace a vyhledávání struktury vložení Mongodb?

  2. Meteor:neočekávaný výstupní kód mongo null. Restartování. co to je?

  3. Jak zobrazit obrázek base64 v reakci?

  4. MongoDB transakce?