MongoDB $filter 没有按预期工作
MongoDB $filter doesn't work as expected
这是我聚合的投影阶段:
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
一直都是假的。
您必须解析文档值,因为它被解释为文字字符串值。
更新
"cond", "{$eq: [\'$$join.exited\', false]}")
到
"cond", Document.parse("{$eq: [\'$$join.exited\', false]}")
或
"cond", new Document("$eq", Arrays.<Object>asList("$$join.exited", false))
两种变体都应该有效。
这是我聚合的投影阶段:
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
一直都是假的。
您必须解析文档值,因为它被解释为文字字符串值。
更新
"cond", "{$eq: [\'$$join.exited\', false]}")
到
"cond", Document.parse("{$eq: [\'$$join.exited\', false]}")
或
"cond", new Document("$eq", Arrays.<Object>asList("$$join.exited", false))
两种变体都应该有效。