Tengo algunos documentos como este:

{
  "user": '1'
},
{ "user": '1'
},
{
  "user": '2'
},
{
  "user": '3'
}

Me gustaría ser capaz de obtener un conjunto de todos los diferentes usuarios y sus respectivos cargos, ordenados en orden decreciente. Así que mi resultado sería algo como esto:

{
  '1': 2,
  '2': 1,
  '3': 1
}

Creo que esto se puede hacer con un Mongo aggregate(), pero estoy teniendo un montón de problemas para averiguar el derecho de flujo para esto.

  • es fácil obtener la respuesta a través de la agregación de salida (va a ser): «0» : { «_id» : «2», «el recuento de» : 1 }, «1» : { «_id» : «3», «el recuento de» : 1 }, «2» : { «_id» : «1», «count» : 2 }
  • ¿Cómo contar el número de ocurrencias para cada campo?
InformationsquelleAutor ritmatter | 2015-01-18

2 Comentarios

  1. 49

    Usted puede obtener el resultado (no en su formato requerido) a través de la agregación de

    db.collection.aggregate(
       {$group : { _id : '$user', count : {$sum : 1}}}
    ).result

    la salida para el ejemplo de los documentos es:

    "0" : {
        "_id" : "2",
        "count" : 1
    },
    "1" : {
        "_id" : "3",
        "count" : 1
    },
    "2" : {
        "_id" : "1",
        "count" : 2
    }
    • Trabajó para mí, pero tuve que quitar .resultado. Yo estoy corriendo de Robomongo como db.getCollection('MyColection').aggregate({$group : { _id : '$post.source', cant: {$sum : 1}}})
    • El código no tiene ningún sentido. ¿Usted acaba de copiar y pegar desde tu propio proyecto?? 😑
    • Sí, es casi el mismo, salvo por los peraltes en lugar de contar. Pensé que era bastante fácil de hacer un mapa para otros ejemplos, así que lo dejé como estaba.
  2. 6

    Para alguien que esta leyendo esto en enero de 2019 el aceptado la respuesta no funciona actualmente en Robo3T (devuelve un pipeline.length - 1 de error).

    Usted debe:

    a) envoltura de la consulta en un conjunto de corchetes []

    b) quitar .result desde el final

    https://github.com/Studio3T/robomongo/issues/1519#issuecomment-441348191

    Aquí está una actualización a la aceptación de respuesta por @triturador que me funciona en Robo3T.

    db.getCollection('collectionName').aggregate(
        [ {$group : { _id : '$user', count : {$sum : 1}}} ]
    )

Dejar respuesta

Please enter your comment!
Please enter your name here