繁体   English   中英

Mongo Aggregate JS'每个'等价物

[英]Mongo Aggregate JS 'every' equivalent

我正在使用aggregate ,我想为每个Document添加一个Boolean property ,以检查Document上的subArray中的所有属性是否为真。

在下面的示例中... CONFLICTS是一个 Docs 子数组,每个 Docs 都包含一个名为ResolvedBoolean property 如果所有冲突都已解决,我只想添加一个新的allResolved字段。

所以..在我的addFields阶段,我有类似的东西

 {
   '$project': {
      'allResolved': {
        '$allElementsTrue': '$CONFLICTS.resolved'
      }, 
    }
  }

所以 JS 等价于const allResolved = CONFLICTS.every(conflict => conflict.resolved)

但这似乎总是返回true ,这是不正确的

询问

  • 这会进行额外检查
  • 检查为数组
  • 不是空数组
  • 并且每个成员都为真(缺失和空值将是假的)

测试代码在这里

aggregate(
[{"$set":
  {"allResolved":
   {"$and":
    [{"$isArray":["$conflicts"]},
     {"$not":[{"$eq":["$conflicts", []]}]},
     {"$reduce":
      {"input":"$conflicts",
       "initialValue":true,
       "in":
       {"$and":[{"$eq":["$$this.Resolved", true]}, "$$value"]}}}]}}}])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM