Array mit dem $ in-Operator in der $ project-Phase filtern

8

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:

%Vor%

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.

    
TomG 12.09.2016, 07:00
quelle

2 Antworten

10

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:

%Vor%

Diese Abfrage gibt nur Elemente zurück, die [x] als Teilmenge des Arrays in user.accounts haben.

    
Ananth Pai 12.09.2016, 07:14
quelle
9

Ab MongoDB 3.4 können Sie den $in Aggregationsoperator in der $project Bühne

%Vor%     
styvane 10.03.2017 16:45
quelle