select distinct mongodb C#
Muss ich select distinct Datensätze aus meiner einfachen mongo-db-Datenbank.
Ich habe viele einfache Datensätze diese Datensätze sieht wie folgt aus :
{"word":"some text"}
Mein code ist sehr einfach.
const string connectionString = "mongodb://localhost";
var client = new MongoClient(connectionString);
MongoServer server = client.GetServer();
MongoDatabase database = server.GetDatabase("text8");
MongoCollection<Element> collection = database.GetCollection<Element>("text8");
MongoCursor<Element> words = (MongoCursor<Element>)collection.FindAll();
Aber ich habe keine Ahnung, wie select distinct word aus der Datenbank.
Könnte jemand mir einige Ratschläge geben ?
- Wollen Sie, teilen Sie Ihre Aufzeichnungen in separate Wörter auf und erwidern diese deutlichen Worte oder schicken Sie einfach die unterschiedlichen Werte für
word
Schlüssel? - Nein, meine Absicht id zu wählen unwiederholbar Worte aus Sammlung.
Du musst angemeldet sein, um einen Kommentar abzugeben.
MongoDB-API hat eine
distinct
aggregation Befehl gibt verschiedene Werte, die sich für einen angegebenen Schlüssel in einer Sammlung. Sie können es auch verwenden, von C# - Treiber:wo
collection
- ist eine Instanz von Ihrem Beispiel. Diese Abfrage gibt alle unterschiedlichen Werteword
Feld in der Sammlung.Auch, wie @JohnnyHK erwähnt in Kommentar, die Sie verwenden können,linq-Konzept, da es unterstützt C# - driver:
Wäre meine Vermutung zu machen - "Wort" ein index auf diese db.
Dann mit einige linq-Abfragen in einen einfachen Ausdruck:
var res = col.Query().Wählen Sie(e => e -.Wort).Distinct();
Dies hätte zur Folge, Lesen alle Wörter aus dem index.
Den
MongoCollection.Distinct
Methode (String) V2.0 ist Legacyfür neue API-version 2.4 wie verwenden:
MongoDB verfügt nicht über einen integrierten in-operator aufteilen einer Zeichenfolge von Wörtern aus einer Abfrage, da es nicht ein Weg, um split ein string ist, dann führen Sie eine "distinct" - Betrieb auf es.
Eine Möglichkeit wäre das erstellen einer MapReduce und Spagat in der MapReduce-code und zählen Sie jedes Wort. Sie können nicht nur mit C# - code.
Eine zweite, und vielleicht einfachere Möglichkeit wäre die pre-split-Bereich, in Worten, so dass Sie könnte verwenden Sie eine der verschiedene Betreiber:
Dann:
Dies würde natürlich die Arbeit, wenn Sie nur wollen, um zu behandeln, wird der gesamte string als "Wort", anstatt jedes Wort einzeln
.
MapReduce ist nicht real-time ... der pseudo-code wäre:
Beim ausführen des MapReduce, es wäre eine Auflistung der Anzahl des Auftretens jedes Wortes.