MongoDB: Abfrage von Dokumenten mit zwei gleichen Feldern, $ match und $ eq

9

Was ist der beste Weg, um alle Dokumente in einer Sammlung zurückzugeben, wenn ich document.a == document.b?

möchte

Ich habe es versucht

%Vor%

Aber es kommt ohne Fehler oder Ergebnisse zurück, weil ich annehme, dass es die Zeichenketten "$ a" und "$ b" buchstäblich zusammenbringt. Gibt es eine andere Möglichkeit anzugeben, dass es sich um Felder handelt?

%Vor%

Das obige funktioniert, erfordert aber den zusätzlichen Schritt, die gefundenen Dokumente erneut abzufragen oder alle möglichen Felder zu projizieren.

Gibt es eine bessere Möglichkeit, diese Abfrage zu erreichen?

    
Peter Sampson 10.06.2015, 17:11
quelle

2 Antworten

1

Grundsätzlich versuchen Sie, einen Self-Join durchzuführen. Eine Operation, die von MongoDB nicht unterstützt wird.

Was den $eq -Operator anbelangt, so wie Sie es vermutet haben:

  • Der $eq Vergleichsabfrageoperator stimmt mit einem Design mit einem Feld überein em> Wert .
  • Aber der $eq Vergleichsaggregationsoperator vergleicht den Wert von zwei Ausdrücke .

Ich kenne keinen anderen Weg, um das zu tun, was Sie brauchen, als einen zusätzlichen $project -Schritt zu verwenden, wie Sie es vorgeschlagen haben.

Bitte beachten Sie, dass dies nicht wesentlich teurer ist, da Ihre Abfrage keinen Index verwenden kann und MongoDB einen vollständigen Scan durchführt.

    
Sylvain Leroux 10.06.2015, 17:52
quelle
2

Wenn ich Ihre Frage richtig verstanden habe, wollen Sie die Dokumente, die in field1 und field2 dieselben Werte haben.

Für diesen Versuch

%Vor%

oder kompakter

%Vor%     
Shivangi Gupta 04.01.2017 18:23
quelle