2012-11-28 14 views
5

Tatsächlich verwende ich map reduce, um einige Berechnungen durchzuführen. Das kann ich nicht mit dem Aggregations-Framework tun, weil es für meine Berechnungen keine verfügbaren Pipeline-Operatoren gibt.Benutzerdefinierte Pipelineoperatoren mit MongoDB Aggregation Framework

Ist es möglich, benutzerdefinierte Pipelineoperatoren zu schreiben?

Vielen Dank im Voraus

+0

Welche Art von zusätzlichen Betreiber benötigen Sie? – Stennie

+0

stddev, median, conditionnal operations hauptsächlich – hotips

Antwort

8

Die Antwort wird auf Ihrer Definition von "möglichen" abhängig:

1) Aus dem Kasten: NEIN.

Wie bei MongoDB 2.2 gibt es keine Endbenutzerfunktion, mit der Sie neue Pipelineoperatoren hinzufügen können. Das Aggregationsframework und die Pipelineoperatoren sind in C++ implementiert, um die Leistung und den gemeinsamen Zugriff auf frühere Aggregationsoptionen wie MapReduce (das in JavaScript implementiert ist) zu verbessern.

2) Wenn Sie eine in C++ schreiben wollen: JA (aber nicht trivial).

MongoDB ist ein Open-Source-Projekt, so dass Sie die Möglichkeit haben, in den C++ - Code einzutauchen und zusätzliche Funktionen selbst zu implementieren (siehe: src/mongo/db/pipeline). Beachten Sie, dass es Richtlinien zu Contributing to the MongoDB project gibt und die laufende Entwicklung äußerst aktiv ist.

Wenn Sie benutzerdefinierte Funktionen schreiben möchten, ist die beste Option im Moment, MapReduce weiter zu verwenden.

Unabhängig von den oben genannten Optionen, wenn es einen Pipeline-Operator oder eine Funktion gibt, die Sie sehen möchten, schlagen Sie sie bitte in der MongoDB Jira SERVER project (Komponente: Aggregation Framework) vor. Dadurch können andere die Feature-Anforderung kommentieren, beobachten und abstimmen. Wenn Sie die Feature selbst implementieren, können Sie in Ihrer Pull-Anforderung auf die Jira-Feature-Beschreibung verweisen. Bevor Sie eine neue Feature-Anforderung senden, sollten Sie auch nachsehen, ob diese Funktion möglicherweise already been suggested hat.

Zum Beispiel gibt es fordert bereits, wie:

+0

Wissen Sie, ob es geplant ist, benutzerdefinierte Pipeline Aggregator mit offiziellen Build zu verwenden? Vielen Dank ! – hotips

+0

Das Aggregationsframework wurde entworfen, um in C++ erweiterbar (und performant) zu sein, so dass benutzerdefinierte Pipelineoperatoren eine unwahrscheinliche Übereinstimmung darstellen. Wenn Sie über Feature-Anfragen in Jira abstimmen, werden diese bei der Planung zukünftiger Releases berücksichtigt. Map/Reduce stellt einen vollständigen JavaScript-Interpreter für die Datenaggregation/-manipulation zur Verfügung, wobei der Kompromiss etwas effizient und leistungsfähig ist. Einen Vergleich der MongoDB-Aggregationsoptionen finden Sie unter: [group(), $ group und MapReduce] (http://stackoverflow.com/questions/12337319). – Stennie

Verwandte Themen