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

mongodb update matched doc fail

Není to selhání, ale design.

V rámci rozhraní API pro hromadné operace , pokud zadáte hodnotu k aktualizaci, která odpovídá existující hodnotě dokumentu, nebude označena jako upravená a ve skutečnosti se nepokusí dokument přepsat.

Jednoduchý test:

db.junk.insert({ "a": 1 })
WriteResult({ "nInserted" : 1 })

db.junk.update({ "a": 1},{ "$set": { "a": 2 }})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

db.junk.update({ "a": 2 },{ "$set": { "a": 2 }})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 0 })

db.junk.update({ "a": 2 },{ "$set": { "a": NumberInt(2) }})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

db.junk.update({ },{ "$set": { "a": NumberInt(2) }})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 0 })

Všechny operace v prostředí MongoDB od verze 2.6 ve skutečnosti používají Hromadné operace API . Zde vidíte WriteResult který pochází z tohoto API jako důkaz, že se to děje.

Zkrácený případ tedy je, že pokud jste „ručně vložili“ položky správného typu, na který upravujete, nezmění se.




  1. V Mongodb, Jak mohu indexovat pole (pole) v kolekcích pouze v sekundárním uzlu (sadě replik)

  2. Jak na to:Indexujte naskenované soubory PDF v měřítku s použitím méně než 50 řádků kódu

  3. Možnost shody příkazu Redis scan nefunguje v Pythonu

  4. Přístupy k ukládání geoprostorových dat v Redis