具有 .every() 等效项的 Mongoose 聚合
Posted
技术标签:
【中文标题】具有 .every() 等效项的 Mongoose 聚合【英文标题】:Mongoose agreggate with an .every() equivalent 【发布时间】:2020-12-08 22:35:57 【问题描述】:我迷失在我的聚合过滤器中。
我想通过他们的 request._id 重新组合访客列表并添加过滤器。
每个访问者中都有一个units
数组,每个访问者中都有一个steps
数组。
我正在搜索 array.every() 而不是 $elemMatch 的等效项,以便在一个单元的每个步骤中找到 true
数据。
const aggregateFilters = 'visitors.request.units': $elemMatch: label: unit, 'workflow.steps': $elemMatch: role, 'state.done': true
如果我搜索state.done: false
值,没关系,因为即使其他人是true
,我也想要结果。
但是,如果我只想要每个 state.done: true
的步骤,当 $elemMatch 作为 .find() 工作时,如何过滤?
我不知道我是否清楚^^
谢谢!
【问题讨论】:
【参考方案1】:你可以改变你的方法来获得你想要的结果。您可以找到 none 的子文档在哪里是假的,而不是查找所有子文档的真实位置
const aggregateFilters = 'visitors.request.units': $elemMatch: label: unit, 'workflow.steps': role, $ne: ['state.done', false]
我没有测试上面的代码,这是该方法可能工作方式的一个示例。
【讨论】:
【参考方案2】:感谢您的回复,我已经尝试过了,但它也可以作为 .find() 工作。如果访客数组中的 state.done 为 true,则返回它...
我终于找到了方法:
const aggregateFilters = 'visitors.request.units': $not: $elemMatch: label: unit, 'workflow.steps': $elemMatch: role, 'state.done': false
【讨论】:
以上是关于具有 .every() 等效项的 Mongoose 聚合的主要内容,如果未能解决你的问题,请参考以下文章
在检查匹配项的同时使用聚合 Mongoose 查询的结果(Mongoose/Express)