【发布时间】:2021-12-30 17:36:02
【问题描述】:
我正在使用aggregate,并且我想在Document 中添加一个Boolean property,如果Document 上的subArray 中的所有属性都为真。
在下面的示例中...CONFLICTS 是一个 Docs 子数组,每个包含一个名为 Resolved 的 Boolean property。我只想添加一个新的 allResolved 字段,以查看是否解决了所有冲突。
所以..在我的addFields 阶段,我有类似的东西
{
'$project': {
'allResolved': {
'$allElementsTrue': '$CONFLICTS.resolved'
},
}
}
所以 JS 等价于 const allResolved = CONFLICTS.every(conflict => conflict.resolved)
但这似乎总是返回 true 这是不正确的
【问题讨论】:
-
$allElementsTrue如果数组的所有元素都为真,则返回真,并且您的查询似乎没问题,请检查此example -
是的,查询似乎很好,JS 端的 Red Herring 是我看到误报的地方。谢谢!
-
啊,极端情况是
conflicts可能不存在,或者它的文档可能不包含resolved属性。如果是这种情况,它将始终返回 true。我们该如何解释呢?谢谢!
标签: javascript mongodb aggregation-framework