0

erwartet Dies ist mein Vorsprung Stufe der Aggregation:

Document filter = new Document(
          "$filter", new Document(
          "input", "$joins").append("as", "join").append(
          "cond", "{$eq: [\'$$join.exited\', false]}")); 
list.add(project(new Document("_id", 0).append("joins", filter).append("userName", 1) 
              .append("chatID", 1).append("warned", 1))); 

Aber es returnes Elemente aus joins, die ihre exited auf true gesetzt (und auch false).
Können Sie mir sagen, was ist mein Fehler?
(Ich sollte erwähnen, dass list eine ArrayList Aggregationsstufen)

EDIT. Dies ist ein Dokument, das ich erwarte:

{ 
    userName: "test", 
    //other fields than joins 
    joins: 
    [ 
     { 
      remaining: 4 
      userID: 1245 
      exited: false 
     }, 
     { 
      remaining: 3 
      userID: 2312 
      exited: false 
     } 
    ] 
} 

ich exited will die ganze Zeit falsch.

+0

Können Sie das Beispieldokument hinzufügen, für das die Abfrage erwartet wird? – Veeram

Antwort

1

Sie müssen den Dokumentwert analysieren, da er als literaler Zeichenfolgenwert interpretiert wird.

aktualisieren

"cond", "{$eq: [\'$$join.exited\', false]}") 

zu

"cond", Document.parse("{$eq: [\'$$join.exited\', false]}") 

oder

"cond", new Document("$eq", Arrays.<Object>asList("$$join.exited", false)) 

sollte Beide Varianten arbeiten.

+0

Arbeitete wie ein Charme. Vielen Dank –