Фильтр MongoDB $ не работает должным образом

Это моя проекция на этапе агрегации:

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)));

Но он возвращает элементы из joins которые их exited установлен в true (а также false).
Можете ли вы сказать мне, в чем моя ошибка?
(Я должен упомянуть, что list является ArrayList этапов агрегации)

РЕДАКТИРОВАТЬ. Это один документ, который я ожидаю:

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

я хочу exited быть ложным все время.

1 ответ

Решение

Вы должны проанализировать значение документа, поскольку оно интерпретируется как буквальное строковое значение.

Обновить

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

в

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

или же

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

Оба варианта должны работать.

Другие вопросы по тегам