首页 > 解决方案 > MongoDB 对象数组

问题描述

我面临的问题如下:

我有一个MongoDB文档,其结构如下

"name": "XYZ",
"array":[
 {
  "value": "Alpha"
 },
 {
  "value": "Beta"
 },
 {
  "value": "Alpha"
 },
]

我必须计算有多少对象具有 Alpha 值。我尝试了以下两个查询,但都只给我值 1。

db.current_database.find({array: {$elemMatch: {value: "Alpha"}}}).count()
db.current_database.find({'array.value': 'Alpha'}).count()

标签: arraysmongodbobject

解决方案


集合方法返回文档,而find不是片段。

计算数组中元素出现次数的几个选项:

大多数语言都提供了一种过滤/减少/计数数组中元素的方法,因此这在客户端应该相当简单。

MongoDB 聚合框架提供了$reduce, $filter, $size, $group,$unwind和其他一些可能在这种情况下有用的运算符。

一种可能的解决方案$reduce

db.current_database.aggregate([
  {$match: {"array.value": "Alpha"}},
  {$addFields:{
      count: {
          $reduce: {
              input: "$array",
              initialValue: 0,
              in: {
                  $cond: {
                     if: {$eq: ["$$this.value", "Alpha"]},
                     then: {$sum: ["$$value", 1]},   
                     else: "$$value"
                  }
               }
           }
       }
  }}
])

推荐阅读