sql >> Database teknologi >  >> NoSQL >> MongoDB

Mongodb opdaterer det specifikke element fra subarray

Problemet i din kode er dot-notation fordi når du angiver punktnotationen, antager du, at de angivne filterkriterier skal matche det enkelte array-element, der opfylder alle kriterierne. Men det gør det ikke. Punktnotation på arrays kan opfange ethvert array-element, hvis et enkelt kriterium matcher. Det er derfor, du får den uventede opdatering.

Du skal bruge $elemMatch for at matche alle filtrene i 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")
  }
})

og outputtet er

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



  1. teknikker til lagring af biblioteker i mongoDB's system.js

  2. Migrering af MongoDB til DynamoDB, del 2

  3. Redis Lua script, der implementerer CAS (check-and-set)?

  4. Mongodb tæller adskilt med flere gruppefelter