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

Vrátit omezený počet záznamů určitého typu, ale neomezený počet dalších záznamů?

Nemyslím si, že je to v současné době (2.6) možné udělat s jedním agregačním kanálem. Je těžké dát přesný argument, proč ne, ale v zásadě agregační kanál provádí transformace proudů dokumentů, jeden dokument po druhém. V potrubí není žádné povědomí o stavu samotného streamu, což je to, co potřebujete, abyste zjistili, že jste dosáhli limitu pro A, B atd. a potřebujete zahodit další dokumenty stejného typu. $group spojuje více dokumentů dohromady a umožňuje jejich souhrnným hodnotám polí ovlivnit výsledný dokument skupiny ($sum , $avg , atd.). Možná to dává nějaký smysl, ale nutně to není přesné, protože existují jednoduché operace, které můžete přidat, aby bylo možné omezit na základě typů, např. přidání $push x akumulátor do $group to vloží hodnotu pouze v případě, že pole, do kterého se přesune, má méně než x prvků.

I kdybych měl způsob, jak to udělat, doporučoval bych udělat jen dvě agregace. Nechte to jednoduché.



  1. Dobrý způsob, jak používat socket.io s clusterem na vícejádrovém serveru?

  2. Jak mohu spustit skript MongoDB js pomocí Java MongoDriver

  3. MongoDB, MapReduce a řazení

  4. MapReduce s MongoDB opravdu, opravdu pomalé (30 hodin vs 20 minut v MySQL pro ekvivalentní databázi)