Was ist der beste Weg, um alle Dokumente in einer Sammlung zurückzugeben, wenn ich document.a == document.b?
möchteIch 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?
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:
$eq
Vergleichsabfrageoperator stimmt mit einem Design mit einem Feld überein em> Wert . $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.
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%Tags und Links database node.js npm mongodb aggregation-framework