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

rozdíl mezi agregátem ($match) a nálezem v MongoDB?

Proč se agregovaný výstup nevrací jako DBCursor nebo seznam?

Agregační rámec byl vytvořen k řešení jednoduchých problémů, které by jinak vyžadovaly redukci map.

Tento rámec se běžně používá k výpočtu dat, která vyžadují celou db jako vstup a málo dokumentů jako výstup.

Jaký je rozdíl mezi operátorem $match použitým uvnitř agregační funkce a běžným find v Mongodb?

Jedním z rozdílů, jak jste uvedl, je návratový typ. Najít návrat výstupu operací jako DBCursor .

Další rozdíly:

  • Výsledek agregace musí být menší než 16 MB. Pokud používáte úlomky, musí být všechna data shromážděna v jednom bodě po první $skupině nebo $sort .
  • $match jediným účelem je zlepšit výkon agregace, ale má i další využití, jako je zlepšení výkonu agregace.

a také proč nemůžeme získat počet dokumentů, které jsou vráceny?

Můžeš. Stačí spočítat počet prvků ve výsledném poli nebo přidat na konec roury následující příkaz:

{$group: {_id: null, count: {$sum: 1}}}

Proč funkce find neumožňuje přejmenování názvů polí jako agregační funkce?

MongoDB je mladý a funkce stále přicházejí. Možná to budeme moci udělat v budoucí verzi. Přejmenování polí je při agregaci důležitější než v najít .

UPRAVIT (26. 2. 2014):

Operace agregace MongoDB 2.6 vrátí kurzor.

UPRAVIT (2014/04/09):

MongoDB 2.6 byl vydán s předpokládanými změnami agregace.



  1. odstranit _id z výsledku mongo

  2. Redis a dotazování na hodnoty

  3. Přehled operátora Percona MongoDB Kubernetes

  4. Redis - Lua tabulky jako návratové hodnoty - proč to nefunguje