具有 .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)

js数组的五种迭代遍历方式 every filter forEach map some

Cocoa:设置等效键

JS 数组迭代方法

引用类型: 迭代方法

Mongoose 错误 - 具有相同型号名称的 Mongoose 型号