Pregunta

Estoy tratando de obtener una lista de valores únicos del campo 'tipo' de mi colección MongoDB. documentos siguiente ejemplo:

{
       "_id" : ...,
       "type" : "report",
       "tasks" : ...
}
{
       "_id" : ...,
       "type" : "research",
       "tasks" : ...
}
{
       "_id" : ...,
       "type" : "memo",
       "tasks" : ...
}
{
       "_id" : ...,
       "type" : "memo",
       "tasks" : ...
}
{
       "_id" : ...,
       "type" : "report",
       "tasks" : ...
}
{
       "_id" : ...,
       "type" : "report",
       "tasks" : ...
}

Estoy buscando, ordenados por frecuencia, los tipos únicos que se encuentran en el campo de tipo de los documentos, así:

["report", "memo", "research"]

¿Cuál es la mejor manera de hacer esto? Espero que pueda hacer esto mediante la consulta con mongo y no descargar toda la colección ...

¿Fue útil?

Solución

En un DBMS SQL estándar esto se haría con la siguiente consulta:

SELECT type, count(*) as ct FROM table GROUP BY type ORDER BY ct;

en mongodb esto se haría mediante la función de grupo, aunque es un poco más complicado:

db.collection.group(
           {key: { "type":true},
            reduce: function(obj,prev) { prev.count += 1; },
            initial: { count: 0 }
            });

Aquí estoy pidiendo el PP para devolver valores para el "tipo" llave (de ahí el "verdadero"), y para cada valor, dado reducen la función se utiliza para agregar los registros encontrados. Aquí sólo estoy actualizar un contador de las veces que aparece cada registro. Si se ejecuta esta consulta que obtendrá algo como esto:

[
    {
        "type" : "report",
        "count" : 5
    },
    {
        "type" : "memo",
        "count" : 15
    }
    {
        "type" : "research",
        "count" : 3
    }

]

Se dará cuenta de que esto no se ordena; incluso los documentos mongodb dicen que la manera más fácil para él es hacerlo del lado del cliente.

La documentación pertinente es aquí .

Otros consejos

Puede utilizar distintos: http://www.mongodb.org/display / docs / agregación La agregación #-distinto

Hay un ejemplo en el doc php: http://php.net/manual /en/mongodb.command.php

$types = $db->command(array("distinct" => "yourCollection", "key" => "type"));

foreach ($types['values'] as $type) {
    echo "$type\n";
}

No sé si los resultados están clasificadas por frecuencia.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top