Frage

Ich versuche, aus meiner mongodb Sammlung eine Liste von eindeutigen Werten aus dem ‚Typ‘ Feld zu bekommen. Beispiel Dokumente unter:

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

Ich suche, durch Frequenz bestellt, die einzigartigen Typen, die in dem Typ-Feld der Dokumente sind, so:

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

Was ist der beste Weg, dies zu tun? Hoffentlich kann ich dies tun, indem mit Mongo Abfrage und nicht die gesamte Sammlung Download ...

War es hilfreich?

Lösung

Auf einem Standard-SQL-DBMS dies würde mit der folgenden Abfrage durchgeführt werden:

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

auf mongodb dies geschehen würde, um die Gruppenfunktion verwenden, obwohl es ist etwas komplizierter:

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

Hier frage ich die dB-Wert für den Schlüssel „type“ zurückzukehren (daher das „true“), und für jeden Wert, der zu reduzieren gegebene Funktion verwendet werden, um die gefundenen Datensätze zu aggregieren. Hier bin ich die Aktualisierung nur zu zählen, wie oft jeder Datensatz angezeigt wird. Wenn Sie diese Abfrage ausführen werden Sie etwas wie diese:

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

]

Sie werden bemerken, das nicht bestellt wird; selbst die mongodb docs sagen, dass der einfachste Weg, um zu bestellen ist es Client-Seite zu tun.

Relevante Dokumentation ist hier .

Andere Tipps

Sie können verschiedene verwenden: http://www.mongodb.org/display / docs / Aggregation # Aggregation-Distinct

Es gibt ein Beispiel in der PHP-doc: http://php.net/manual /en/mongodb.command.php

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

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

Ich weiß nicht, ob die Ergebnisse durch Frequenz bestellt werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top