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

Актуализиране на дълбок запис в MongoDb

Проблемът е, че не можете да използвате $ оператор за показване на съвпадение на вложени нива в масив. И най-важното, можете да посочите само веднъж.

Както е посочено от документацията , това ли е $ щесамо съответства напървия намерен елемент. Това несамо означава, че ако сте имали множество съвпадения за вашата заявка, тогава ще бъде избрано само първото, това също означава, че само първото съвпадение ще се използва позиция на масива. Това означава, че нещо подобно също няма да работи:

{ $set: { '_children.addressesR.1._children.configId.a._children.$.b': 30 } 

Тъй като това погрешно би съвпаднало с index 1 стойност и актуализиране на елемент, който не сте очаквали.

Ако може евентуално да актуализирате целия масив, следното ще работи:

{ $set: {"_children.addressesR.$._children.configId.a._children": [ { b: 10}, { b: 30} ] } }

Това е както казах, защото index съвпада спървото масив.

Но предвид структурата, която имате, изглежда, че най-добрият ви вариант е да промените този масив от най-високо ниво, за да бъде вместо това поддокумент. Освен ако в действителност това няма причина да бъде масив, а не двете смесени типове документи, каквито изглежда сега.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mongoose.js транзакции

  2. Вземете списък с индекси в MongoDB

  3. Мангуста, сортирайте заявката по попълнено поле

  4. Грешка в Mongodb не успя да използва текстовия индекс, за да удовлетвори заявката $text

  5. Как да премахнете непроверен потребител с Mongoose и TTL