Tengo algunas entradas como:
{ "name":"a", "value":10 } { "name":"b", "value":20 } { "name":"c", "value":10 } ... Y puedo seleccionar nombres de una consulta con db.collection.find({"value":10},{"name":1, _id: false}) . Me da lo siguiente:
{ "name" : "a" } { "name" : "c" } ... Sin embargo, quiero que devuelva una matriz de valores, no un conjunto de pares {clave: valor}. (como [ "a", "c", ... ] ). ¿Hay alguna manera de lograr esto solo con consultas de MongoDB o debo seleccionarlas y colocarlas en una matriz en mi aplicación?
Salida de corriente:
{ "name" : "a" } { "name" : "c" } ...Rendimiento esperado:
["a", "c", ...]Si lo anterior no es una salida posible, también puede ser
{ "result": ["a", "c", ...] }db.collection.distinct( "name", { "value": 10 })del comentario de @Sagar Reddy devolverá una matriz establecida :
["a", "c"]Esto es probablemente lo que necesitas. De todos modos, se puede lograr una consulta similar más compleja utilizando la agregación , donde puede usar etapas de agregación adicionales.
db.collection.aggregate([ { $match: { value: 10 }}, { $group: { _id: null, result: { $addToSet: '$name' }}}, { $project: { _id: 0, result: 1 }} ]) En la group de grupos, addToSet se puede reemplazar con push si desea que aparezca el mismo valor varias veces.
Salida usando addToSet :
{ "result" : [ "c", "a" ] } Ex salida usando push :
{ "result" : [ "a", "c", "c" ] }