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

odstranění objektu z vnořeného pole objektů mongodb

Můžete to udělat tak, že jako výraz dotazu pro .update() zadáte něco, co se bude shodovat s „dokumentem“ a poté s požadovanou položkou pole „shifts“. . Poté použijte poziční $ operátor pro odpovídající index pole pomocí $pull :

db.collection.update(
 { "_id": ObjectId("59180305c19dbaa4ecd9ee59"), "shifts.timeslot": "8:00 - NOON" },
 { "$pull": { "shifts.$.volunteers": { "fullname": "Mary Mack" } } }
)

To je v tomto případě v pořádku, protože se pouze pokoušíte "shodovat" na "vnějším" poli ve vnořené struktuře a $pull má vlastní argumenty dotazu k identifikaci položky pole, kterou chcete odstranit.

Opravdu byste však měli být opatrní při používání „vnořených polí“. Stejně jako $pull operace takto funguje, aktualizace "vnitřního" pole nejsou ve skutečnosti možné, protože poziční $ operátor bude odpovídat pouze "prvnímu" prvku, který splňuje podmínku. Takže váš příklad "Mary Mack" ve více směnách by se vždy shodoval pouze v prvním nalezeném záznamu pole "shifts".



  1. Mongoid:jak se dotazovat na všechny objekty, kde je hodnota nulová?

  2. Provedení aktualizace na cestě '_id' by změnilo neměnné pole '_id'

  3. Jak seřadit výsledky podle délky řetězce na MongoDB

  4. MongoDB 3 Java zkontroluje, zda existuje kolekce