Mongodb-Aggregation: So geben Sie nur übereinstimmende Elemente eines Arrays zurück [duplizieren]

8

In meiner mongoDB Büchersammlung habe ich Dokumente wie folgt strukturiert:

%Vor%

Ich führe die folgende Regex-Abfrage durch, um alle Dokumente zu finden, die einen indexToken haben, der mit "Par" beginnt:

%Vor%

Wenn ich nur das Feld indexTokens auswähle, das wie folgt zurückgegeben wird:

%Vor%

Das resultierende DBObject ist

%Vor%

Was ich erhalten möchte, ist NUR das Token / Tag, das mit der Regex übereinstimmt (ich kümmere mich nicht um das Abrufen des Dokuments an diesem Punkt, auch brauche ich nicht alle Tags des passenden Dokuments)

Ist dies der Fall für das neue Aggregations-Framework, das unter MongoDB v2.2 veröffentlicht wurde? ?

Wenn ja, wie ändere ich meine Abfrage, so dass das tatsächliche Ergebnis wie folgt aussehen würde:

{"indexTokens": ["Paris", "Paradise River", "Parma", etc ....]}

Bonusfrage (hast du den Code): Wie mache ich das mit dem Java-Treiber?

Im Moment sieht mein Java so aus:

%Vor%

Thx :)

BEARBEITEN:

Gemäß Ihren Antworten habe ich meinen JAVA-Code wie folgt geändert:

%Vor%

Welche Ausgänge

%Vor%

Das ist Genie!

Vielen Dank!

    
azpublic 06.09.2012, 09:27
quelle

2 Antworten

10

Sie könnten dies mit dem 2.2 Aggregation Framework tun. So etwas in der Art;

%Vor%

Dies ist vielleicht noch näher an dem, wonach Sie suchen, wenn Sie das Array ohne das doc wirklich wollen;

%Vor%     
cirrus 06.09.2012, 10:43
quelle
2
___ qstnhdr ___ Mongodb-Aggregation: So geben Sie nur übereinstimmende Elemente eines Arrays zurück [duplizieren] ___ answer12298311 ___

Sie könnten dies mit dem 2.2 Aggregation Framework tun. So etwas in der Art;

%Vor%

Dies ist vielleicht noch näher an dem, wonach Sie suchen, wenn Sie das Array ohne das doc wirklich wollen;

%Vor%     
___ antwort12301653 ___

Aufbauend auf der Antwort von cirrus, empfehle ich die $unwind zuerst zu machen, um die redundante $match zu vermeiden. Etwas wie:

%Vor%

Wie machst du das in Java? Sie können das DBCollection.aggregate(...) Methode des MongoDB v2.9.0 Treibers. Jeder Pipeline-Betreiber, z. $unwind oder $match , entspricht einem Objekt DBObject .

    
___ tag123mongodb ___ MongoDB ist eine skalierbare, hochleistungsfähige Open-Source-Dokumenten-orientierte NoSQL-Datenbank. Es unterstützt eine große Anzahl von Sprachen und Anwendungsentwicklungsplattformen. Fragen zur Serververwaltung können unter http://dba.stackexchange.com gestellt werden. ___ tag123aggerationframework ___ Das MongoDB Aggregation Framework bietet die Möglichkeit, Daten in MongoDB 2.2+ neu zu gestalten und zu aggregieren. ___ qstntxt ___

In meiner mongoDB Büchersammlung habe ich Dokumente wie folgt strukturiert:

%Vor%

Ich führe die folgende Regex-Abfrage durch, um alle Dokumente zu finden, die einen indexToken haben, der mit "Par" beginnt:

%Vor%

Wenn ich nur das Feld indexTokens auswähle, das wie folgt zurückgegeben wird:

%Vor%

Das resultierende DBObject ist

%Vor%

Was ich erhalten möchte, ist NUR das Token / Tag, das mit der Regex übereinstimmt (ich kümmere mich nicht um das Abrufen des Dokuments an diesem Punkt, auch brauche ich nicht alle Tags des passenden Dokuments)

Ist dies der Fall für das neue Aggregations-Framework, das unter MongoDB v2.2 veröffentlicht wurde? ?

Wenn ja, wie ändere ich meine Abfrage, so dass das tatsächliche Ergebnis wie folgt aussehen würde:

{"indexTokens": ["Paris", "Paradise River", "Parma", etc ....]}

Bonusfrage (hast du den Code): Wie mache ich das mit dem Java-Treiber?

Im Moment sieht mein Java so aus:

%Vor%

Thx :)

BEARBEITEN:

Gemäß Ihren Antworten habe ich meinen JAVA-Code wie folgt geändert:

%Vor%

Welche Ausgänge

%Vor%

Das ist Genie!

Vielen Dank!

    
___
slee 06.09.2012 13:51
quelle