mit $ regex in mongodb Aggregation Framework in $ Gruppe

8

Betrachten Sie das folgende Beispiel:

%Vor%

Dies gruppiert nach dem Autorfeld und berechnet zwei Felder.

Ich habe Werte für $ author = FirstName_LastName. Jetzt, statt nach $ author zu gruppieren, möchte ich nach allen Autoren gruppieren, die denselben Nachnamen haben.

Ich habe versucht, $ regex nach allen übereinstimmenden Zeichenfolgen nach dem '_'

zu gruppieren %Vor%     
user1447121 09.02.2013, 07:07
quelle

3 Antworten

6

Tatsächlich gibt es keine solche Methode, die diese Art von Funktionalität bietet, oder ich konnte die passende Version nicht finden, die sie enthält. Das funktioniert nicht mit $ regexp ich denke: Ссылка es ist nur für die Mustererkennung.

Es gibt eine Verbesserungsanfrage in der Jira: Ссылка

Es ist im offenen ungelösten Zustand. ABER

in github fand ich diese darbietung: Ссылка

Und wenn Sie dieses Commit überprüfen: Ссылка

Es enthält mehr oder weniger genau die Methode, die Sie wahrscheinlich haben. Ich verstehe den Zustand dieser Verbesserung nicht wirklich: in 2.2.3 funktioniert es nicht.

    
attish 09.02.2013 11:16
quelle
4

Verwenden Sie mapReduce: Dies ist die allgemeine Form der Aggregation. So geht es in der Mongo Shell: Definieren Sie die Kartenfunktion

%Vor%

und die Reduzierungsfunktion

%Vor%

Führen Sie mapReduce aus und speichern Sie das Ergebnis in map_reduce_result

%Vor%

Abfrage map_reduce_result, um das Ergebnis zu haben

%Vor%     
innoSPG 05.07.2013 17:07
quelle
3

Eine mögliche Problemumgehung mit dem Aggregationsframework besteht in der Verwendung von $ project zur Berechnung des Autornamens. Es ist jedoch schmutzig, da Sie die verschiedenen Vornamengrößen manuell durchlaufen müssen:

Hier berechnen wir den Feldnamen als Teilzeichenfolge nach dem Zeichen "_" und versuchen jede seiner möglichen Positionen (deshalb gibt es eine Kette von $ cond) und Fallbacking, wenn der erste $ -Autor zurückgegeben wird Name ist zu lang:

Ссылка

%Vor%     
bla 12.02.2014 14:03
quelle