Tengo una base de datos mongo de esta estructura:

 people:{
    {
     'code': '234',
     'name': 'x'
    },
    {
     'code': '432',
     'name': 'y'
    },
    {
     'code': '234',
     'name': 'x'
    }
 }

El resultado de mi consulta debería ser:

{
  'code': '234',
  'name': 'x'
}

Me gustaría recuperar este valor ya que tiene una ocurrencia máxima en esta colección. Estoy intentando con métodos agregados y de conteo, pero no pude administrarlo adecuadamente.

¿Cuál sería el comando para hacerlo?

Gracias de antemano.

1
Hasan Iqbal 28 ago. 2014 a las 10:53

2 respuestas

La mejor respuesta

Puede usar esta tubería:

pipeline = [
    {'$group': {'_id': '$code', 'count': {'$sum': 1}}},
    {'$sort': {'count': -1}}
]

Clasificará los documentos por número de ocurrencias en orden descendente. Ejemplo:

In [4]: pymongo.MongoClient().whatever.test.aggregate(pipeline)
Out[4]: {'result': [{'_id': 234.0, 'count': 2}, {'_id': 432.0, 'count': 1}], 'ok': 1.0}
1
vaultah 28 ago. 2014 a las 07:31

Mongo Shell: -

>>>db.people.aggregate([
        {$group:{_id:{code:"$code",name:"$name"},count:{$sum:1}}},
        {$sort:{count:-1}},
        {$limit:1}
    ])


{ "_id" : { "code" : "234", "name" : "x" }, "count" : 2 }
0
Nullify 28 ago. 2014 a las 08:13