Estou brincando com o MongoDB tentando descobrir como fazer uma simples
SELECT province, COUNT(*) FROM contest GROUP BY province
Mas parece que não consigo descobrir isso usando a função agregada. Eu posso fazer isso usando uma sintaxe de grupo muito estranha
db.user.group({
"key": {
"province": true
},
"initial": {
"count": 0
},
"reduce": function(obj, prev) {
if (true != null) if (true instanceof Array) prev.count += true.length;
else prev.count++;
}
});
Mas existe uma maneira mais fácil / rápida de usar a função agregada?
"errmsg" : "exception: A pipeline stage specification object must contain exactly one field.",
?{ $sort: { count: -1 } }
Eu preciso de alguma operação extra com base no resultado da função agregada. Finalmente, encontrei uma solução para a função agregada e a operação com base no resultado no MongoDB. Eu tenho uma coleção
Request
com camporequest, source, status, requestDate
.Grupo de campo único por & contagem:
Vários campos agrupados por & contagem:
Vários campos Agrupar por e contar com classificação usando o campo:
Vários campos Agrupar por e contar com classificação usando Contagem:
fonte
Se você precisar de várias colunas para agrupar, siga este modelo. Aqui estou conduzindo uma contagem por
status
etype
:fonte
Além disso, se você precisar restringir o agrupamento, poderá usar:
fonte
A partir do MongoDB 3.4, você pode usar a
$sortByCount
agregação.https://docs.mongodb.com/manual/reference/operator/aggregation/sortByCount/
Por exemplo:
fonte
$sortByCount
na verdade é um "pseudo operador", como vários outros operadores de estágio de agregação introduzidos no MongoDB 3.4. Tudo o que eles realmente fazem é expandir para seus respectivos estágios de agregação. Nesse caso, a$group
com$sum: 1
é mostrado nas respostas existentes e um$sort
estágio adicional . Eles não oferecem outra vantagem além de "digitar menos código" , que pode ou não ser mais descritivo (se você gosta desse tipo de coisa). IMHO, distintos$group
e$sort
estágios no código são muito mais descritivos e, de fato, mais flexíveis.Este tipo de consulta funcionou para mim:
Consulte http://docs.mongodb.org/manual/tutorial/aggregation-with-user-preference-data/
fonte
Comando shell Mongo que funcionou para mim:
fonte