sql >> Databáze >  >> NoSQL >> MongoDB

MongoDB:Odebrání pole ze VŠECH vnořených dokumentů v poli pole

Důvod, proč se vám zobrazuje tato chyba, je ten, že v klauzuli filtru nemáte žádný predikát. Můžete to udělat:

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

A nedojde k chybě – ve skutečnosti bude mít jeden z dokumentů id atribut odstraněn. Problém je v tom, že poziční operátor odpovídá pouze PRVNÍMU prvku pole, který odpovídá vašemu predikátu, neodpovídá všem prvkům. Větším problémem je, že v současné době není možné aktualizovat všechny prvky v poli v MongoDB (https ://jira.mongodb.org/browse/SERVER-1243 ).

Buď budete muset iterovat každý prvek v poli pomocí číselné pozice ("messages.0.id", "messages.1.id" atd.), nebo můžete pole stáhnout do své aplikace a procházet prvky a aktualizujte je a poté pole uložte zpět.

Z lístku JIRA můžete vidět, že tento problém je již nějakou dobu otevřený, ale 10gen to zřejmě nepovažuje za příliš vysokou prioritu.



  1. Přidání skóre do agregace MongoDB pomocí $switch

  2. Jak vypíšu celou databázi MongoDB jako text/json?

  3. Podmíněná částka $ v MongoDB

  4. MongoDB $slice (stránkování vestavěného pole)