sql >> Database >  >> NoSQL >> MongoDB

Mongodb werkt het specifieke element van subarray bij

Het probleem in uw code is dot-notation omdat Wanneer u de puntnotatie opgeeft, gaat u ervan uit dat de opgegeven filtercriteria moeten overeenkomen met het enkele arrayelement dat aan alle criteria voldoet. Maar dat doet het niet. Puntnotatie op arrays kan elk array-element oppikken als een enkel criterium overeenkomt. Daarom krijg je de onverwachte update.

Je moet $elemMatch gebruiken om alle filters in de array te matchen 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")
  }
})

en de uitvoer is

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



  1. De databasedump van een oudere versie van mongo herstellen naar een nieuwe versie van mongo

  2. De strijd om de NoSQL-databases - MongoDB en Oracle NoSQL vergelijken

  3. Een structuur voor aggregatie genereren

  4. Hoe u een document en een enkel subdocument kunt vinden dat overeenkomt met bepaalde criteria in de MongoDB-verzameling