Derzeit ist es nicht möglich, den $ in -Operator in $ Filter Array Aggregationsoperator.
Nehmen wir an, das ist das Dokumentenschema:
%Vor% Ich möchte mit aggregate
die Dokumente mit einem gefilterten Array von users
basierend auf dem Inhalt des Arrays accounts
erhalten.
Wenn die $in
mit dem Operator $filter
arbeiten würde, würde ich erwarten, dass es so aussieht:
und geben Sie in filtered_users
nur den ersten Benutzer zurück, da x in seinem Konto ist.
Aber wie gesagt, das funktioniert nicht und ich bekomme den Fehler:
"ungültiger Operator '$ in'"
, weil es im Operator $filter
nicht unterstützt wird.
Jetzt weiß ich, dass ich es mit $unwind
und regulären $match
-Operatoren machen kann, aber dann wird es viel längere (und hässlichere) Aggregation mit der Notwendigkeit sein, $group
zu verwenden, um die Ergebnisse als Array zurückzustellen - Ich will das nicht
Meine Frage ist, ob es eine andere Möglichkeit gibt, den Operator $filter
zu manipulieren, um meine gewünschten Ergebnisse zu erhalten.
Da $in
im Aggregatbetrieb für Array nicht unterstützt wird, wäre die Alternative, dass Sie $setIsSubset
verwenden. Weitere Informationen hierzu finden Sie unter . Die zusammengefasste Abfrage würde nun wie folgt aussehen:
Diese Abfrage gibt nur Elemente zurück, die [x]
als Teilmenge des Arrays in user.accounts
haben.
Tags und Links mongodb aggregation-framework mongodb-query