【问题标题】:Mongoose agreggate with an .every() equivalent具有 .every() 等效项的 Mongoose 聚合
【发布时间】: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() 工作时,如何过滤?

我不知道我是否清楚^^

谢谢!

【问题讨论】:

    标签: mongoose filter aggregate


    【解决方案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 } } } } } }

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-06-27
        • 1970-01-01
        • 2016-11-21
        • 1970-01-01
        • 1970-01-01
        • 2017-11-27
        • 1970-01-01
        相关资源
        最近更新 更多