MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Mongodb актуализира конкретния елемент от подмасив

Проблемът във вашия код е dot-notation тъй като когато зададете нотацията с точка, вие приемате, че посочените критерии за филтър трябва да съответстват на единичния елемент на масива, който отговаря на всички критерии. Но не става. Точковата нотация на масиви може да вземе всеки елемент от масива, ако някой от критериите съвпада. Ето защо получавате неочакваната актуализация.

Трябва да използвате $elemMatch за да съответства на всички филтри в array елемент.

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" : 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. MongoDB $час

  2. 9 нови функции на MongoDB – трябва да се научите да владеете MongoDB

  3. Как да накарам вградения mongodb да пази данните при изключване на приложението?

  4. Схеми във външен модул не работят в Node.js

  5. Как да предотвратите вмъкването на функция за актуализиране в MongoDB от Meteor?