sql >> Databasteknik >  >> NoSQL >> MongoDB

Mongodb uppdaterar det specifika elementet från subarray

Problemet i din kod är dot-notation eftersom när du anger punktnotationen antar du att de angivna filterkriterierna måste matcha det enda matriselementet som uppfyller alla kriterier. Men det gör det inte. Punktnotation på arrayer kan hämta vilket arrayelement som helst om något enstaka kriterium matchar. Det är därför du får den oväntade uppdateringen.

Du måste använda $elemMatch för att matcha alla filter 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")
  }
})

och utgången är

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



  1. Använder operatorn $slice för att få det sista elementet i arrayen

  2. Hur fixar jag 'Fel:querySrv EREFUSED' när du ansluter till MongoDB Atlas?

  3. mongoDB vitlista IP

  4. Prestandavinster med att använda UUID istället för dess strängrepresentation som _id på MongoDB?