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

MongoDB:Премахване на поле от ВСИЧКИ поддокументи в поле на масив

Причината да получавате тази грешка е, че нямате никакъв предикат в клаузата за филтър. Можете да направите това:

mongos> db.test.update({"messages.id": {$exists: true}}, {$unset: {"messages.$.id":true}}, {multi:true})

И няма да получите грешка - всъщност един от документите ще има id атрибут премахнат. Проблемът е, че позиционният оператор съвпада само с ПЪРВИЯ елемент от масива, който съответства на вашия предикат, той не съвпада с всички елементи. По-големият проблем е, че в момента не е възможно да се актуализират всички елементи в масив в MongoDB (https ://jira.mongodb.org/browse/SERVER-1243 ).

Или ще трябва да преминете през всеки елемент в масива, като използвате числовата позиция ("messages.0.id", "messages.1.id" и т.н.), или можете да изтеглите масива в приложението си, да преминете през елементи и ги актуализирайте и след това запишете масива обратно.

Можете да видите от тикета на JIRA, че този проблем е отворен от известно време, но изглежда 10gen не го смята за много висок приоритет.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. параметърът include_type_name е зададен на true в node.js

  2. Извлечете съхранено изображение от mongodb с помощта на python

  3. MongoDB изтрива много бавно

  4. Предотвратяване на инжектиране на JavaScript NoSQL в MongoDB

  5. Монго агрегиране