首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Mongodb aggregation - count数组元素的整数值大于

Mongodb aggregation - count数组元素的整数值大于
EN

Stack Overflow用户
提问于 2019-06-21 00:54:37
回答 1查看 34关注 0票数 0

我需要编写一个MongoDB聚合管道来计算具有包含两种类型的值的数组的对象:

  • =10
  • =20

这是我的数据集:

代码语言:javascript
复制
[
 { values: [ 1, 2, 3] },
 { values: [12, 1, 3] },
 { values: [1, 21, 3] },
 { values: [1, 2, 29] },
 { values: [22, 9, 2] }
]

这将是预期的输出

代码语言:javascript
复制
{
  has10s: 4,
  has20s: 3
}

Mongo的$in (aggregation)似乎是这项工作的工具,除非我不能让它工作。

这是我的(非工作)管道:

代码语言:javascript
复制
db.mytable.aggregate([
  {
    $project: {
      "has10s" : { 
         "$in": [ { "$gte" : [10, "$$CURRENT"]}, "$values"]} 
    },
     "has20s" : { 
         "$in": [ { "$gte" : [20, "$$CURRENT"]}, "$values"]} 
    }
  },
  { $group: { ... sum ... } }
])

$in的输出似乎总是正确的。有人能帮上忙吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-21 03:25:23

您可以尝试如下所示:

代码语言:javascript
复制
db.collection.aggregate([{
    $project: {
      _id: 0,
      has10: {
        $size: {
          $filter: {
            input: "$values",
            as: "item",
            cond: { $gte: [ "$$item", 10 ] }
          }
        }
      },
      has20: {
        $size: {
          $filter: {
            input: "$values",
            as: "item",
            cond: { $gte: [ "$$item", 20 ] }
          }
        }
      }
    }
  },
  {
    $group: {
      _id: 1,
      has10: { $sum: "$has10" },
      has20: { $sum: "$has20" }
    }
  }
])

使用$project$filter获取实际元素,然后通过$size获取数组长度。

查看working here

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56690676

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档