Domanda

Sto cercando di ottenere un elenco di valori univoci dal campo 'Tipo' dalla mia collezione MongoDB. documenti seguente esempio:

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

sto cercando, ordinati in base alla frequenza, i tipi unici che sono nel campo tipo di documenti, così:

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

Qual è il modo migliore per farlo? Spero di poter fare questo interrogando con Mongo e non scaricare l'intera collezione ...

È stato utile?

Soluzione

In una standard SQL DBMS ciò sarebbe stato fatto con la seguente query:

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

su MongoDB questo sarebbe stato fatto utilizzando la funzione di gruppo, anche se è un po 'più complicato:

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

Qui sto chiedendo il db per restituire i valori per il "tipo" chiave (da qui la "vera"), e per ogni valore, la data ridurre la funzione verrà utilizzato per aggregare i record trovati. Qui sto solo l'aggiornamento di un conteggio di quante volte appare ogni record. Se si esegue questa query si otterrà qualcosa di simile:

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

]

Si noterà che non è ordinato; anche i documenti mongodb dicono che il modo più semplice per ordine è di farlo sul lato client.

qui .

Altri suggerimenti

È possibile utilizzare distinte: http://www.mongodb.org/display / DOCS / aggregazione # aggregazione-distinto

C'è un esempio nel documento 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";
}

Non so se i risultati sono ordinati in base alla frequenza.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top