MongoDB聚合-使用键和值将字符串数组简化为对象,将其作为数组中字符串出现的次数

时间:2019-12-10 14:24:20

标签: mongodb mongodb-query aggregation-framework

希望你做得很好。

我在mongoDB中有一些这样的文件:

{_id:"someId", Fruits: ["mango", "orange", "mango", "orange", "orange", "apple"]

我想使用mongoDB聚合来获得以下输出:

{_id: "someId", Fruits: {mango: 2, orange: 3, apple: 1}

我尝试了很多方法,花了一些时间阅读文档,但仍然不知道如何使它工作。

你们能帮我吗?

1 个答案:

答案 0 :(得分:0)

您可以使用以下汇总

db.collection.aggregate([
  { "$addFields": {
    "Fruits": {
      "$arrayToObject": {
        "$map": {
          "input": { "$setUnion": ["$Fruits"] },
          "as": "m",
          "in": {
            "k": "$$m",
            "v": {
              "$size": {
                "$filter": {
                  "input": "$Fruits",
                  "as": "d",
                  "cond": { "$eq": ["$$d", "$$m"] }
                }
              }
            }
          }
        }
      }
    }
  }}
])

Output

[
  {
    "Fruits": {
      "apple": 1,
      "mango": 2,
      "orange": 3
    },
    "_id": "someId"
  }
]