¿Existe una consulta para calcular cuántos valores distintos contiene un campo en la base de datos?
fe tengo un campo para país y hay 8 tipos de valores de país (españa, inglaterra, francia, etc ...)
Si alguien agrega más documentos con un nuevo país, me gustaría que la consulta devuelva 9.
¿Hay una manera más fácil que agrupar y contar?
Respuestas:
MongoDB tiene un
distinct
comando que devuelve una matriz de valores distintos para un campo; puede comprobar la longitud de la matriz para un recuento.También hay un
db.collection.distinct()
asistente de shell :fuente
A continuación se muestra un ejemplo del uso de la API de agregación. Para complicar el caso, estamos agrupando palabras que no distinguen entre mayúsculas y minúsculas de la propiedad de matriz del documento.
que dan resultado como
fuente
unwind
es necesario porque el código agrupa valores individuales de un campo de matriz que coincide con cómodistinct
funciona.unwind
es necesario cuando se trabaja con matrices.Con MongoDb 3.4.4 y versiones posteriores, puede aprovechar el uso del
$arrayToObject
operador y una$replaceRoot
canalización para obtener los recuentos.Por ejemplo, suponga que tiene una colección de usuarios con diferentes roles y le gustaría calcular los distintos recuentos de roles. Debería ejecutar la siguiente canalización agregada:
Salida de ejemplo
fuente
.distinct()
.Puede aprovechar las extensiones de Mongo Shell . Es una sola importación .js que puede agregar a su
$HOME/.mongorc.js
, o programáticamente, si también está codificando en Node.js / io.js.Muestra
Para cada valor distinto del campo, se cuentan las ocurrencias en los documentos, opcionalmente filtrados por consulta.
El parámetro de campo podría ser una matriz de campos.
fuente
require("./script.js")
, supongo.mongorc.js
archivo Léame del repositorio (RTFM! 1 !! 1!) Básicamente, coloque el archivo en su directorio de inicio. Hecho.Para encontrar distintos en
field_1
en la colección, pero también queremos algunaWHERE
condición de la que podemos hacer como sigue:db.your_collection_name.distinct('field_1', {WHERE condition here and it should return a document})
Entonces, encuentre un número distinto
names
de una colección donde la edad> 25 será como:db.your_collection_name.distinct('names', {'age': {"$gt": 25}})
¡Espero eso ayude!
fuente