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

Důsledky použití $unwind na vnořených polích?

Vždy je dobré mít na paměti paměťové zdroje, když $unwind z důvodu replikace dat, ke které dochází.

Pomocí $match zúžit výsledky na konkrétní dokumenty, které hledáte, je samozřejmě jedním ze způsobů, jak snížit množství paměti potřebné k uložení vrácených dat.

Dalším způsobem, jak snížit nároky na paměť, je $project . $project umožňuje přeuspořádat dokumenty v kanálu tak, že vrátíte pouze prvky, které vás zajímají.

Chcete-li použít váš příklad,

{
  someInfo: "blah blah blah",
  answers: [
    {
      email: "[email protected]",
      values: [
        {value: 1, label: "test1"},
        {value: 2, label: "test2"}    
      ]
    },
    {
      email: "[email protected]",
      values: [
        {value: 6, label: "test1"},
        {value: 1, label: "test2"}    
      ]
    }
  ]
}

S

db.collection.aggregate([{ $match: { <element>: <value> }}, { $project: { _id: 0, answers: 1}}])

odstraní someInfo a další atributy, které vás nemusí zajímat. Pak můžete $project znovu po odvinutí...

db.collection.aggregate([
   { $match: { <element>: <value> }},
   { $project: { _id: 0, answers: 1}},
   { $unwind: "$answers"},
   { $unwind: "$answers.tags"},
   { $project: { e: "$answers.email", v: "$answers.values"}}
])

vrátí poměrně kompaktní výsledky jako:

{ e: "[email protected]", v: { value: 1, label: "test1" } }
{ e: "[email protected]", v: { value: 2, label: "test2" } }
{ e: "[email protected]", v: { value: 6, label: "test1" } }
{ e: "[email protected]", v: { value: 1, label: "test2" } }

Jednopísmenné názvy atributů sice snižují čitelnost pro člověka, ale snižují velikost dat, která je nahuštěna dlouhými opakovanými názvy atributů.




  1. Redis connect ECONNREFUSED v NodeJS v clusteru Kubernetes

  2. Chyba:Dokument operace aktualizace musí obsahovat atomické operátory při spuštění updateOne

  3. Jak dotazovat BsonExtraElements v MongoDB přes Linq

  4. Mongoid - limit na odlišný dotaz