MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Mongodb aktualizuje określony element z podtablicy

Problem w twoim kodzie to dot-notation ponieważ podczas określania notacji z kropką zakłada się, że określone kryteria filtrowania muszą odpowiadać pojedynczemu elementowi tablicy, który spełnia wszystkie kryteria. Ale tak nie jest. Notacja kropkowa na tablicach może pobrać dowolny element tablicy, jeśli spełnia dowolne pojedyncze kryterium. Dlatego otrzymujesz nieoczekiwaną aktualizację.

Musisz użyć $elemMatch aby dopasować wszystkie filtry w array element.

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 wyjście to

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



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Jaki jest właściwy wzorzec dla schematów zagnieżdżonych w Mongoose/MongoDB?

  2. Tworzenie pliku w GridFs (MongoDb)

  3. MongoDB 2.2 — Aktualizowanie dokumentu zagnieżdżonego w tablicy

  4. Mongoexport błąd parsowania zapytania

  5. Mongoose zmień nazwę kolekcji