MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Restituire un numero limitato di record di un certo tipo, ma un numero illimitato di altri record?

Non credo che attualmente (2.6) sia possibile farlo con una pipeline di aggregazione. È difficile fornire un'argomentazione precisa sul perché no, ma fondamentalmente la pipeline di aggregazione esegue trasformazioni di flussi di documenti, un documento alla volta. Non c'è consapevolezza all'interno della pipeline dello stato del flusso stesso, che è ciò di cui avresti bisogno per determinare che hai raggiunto il limite per A, B, ecc. e devi eliminare altri documenti dello stesso tipo. $group riunisce più documenti e consente ai loro valori di campo in aggregato di influenzare il documento di gruppo risultante ($sum , $avg , eccetera.). Forse questo ha un senso, ma non è necessariamente rigoroso perché ci sono semplici operazioni che potresti aggiungere per rendere possibile il limite in base ai tipi, ad esempio aggiungendo un $push x accumulatore a $group che esegue il push del valore solo se l'array a cui viene eseguito il push ha meno di x elementi.

Anche se avessi un modo per farlo, consiglierei di fare solo due aggregazioni. Mantieni la semplicità.