Фильтр 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))
Оба варианта должны работать.