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%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.
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%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%Tags und Links regex mongodb aggregation-framework