【问题标题】:MongoDB query similar to SELECT COUNT GROUP BY类似于 SELECT COUNT GROUP BY 的 MongoDB 查询
【发布时间】:2022-11-22 04:34:58
【问题描述】:

我的 MongoDB 数据库有“interviews”集合,其文档结构类似于:

{
    "_id" : ObjectId("632b97b0f2bd3f64bbc30ec8"),
    "agency" : "AG1",
    "year" : "2022",
    "month" : "9",
    "residents" : [
        {
            "sequential" : 1,
            "name" : "Resident 1",
            "statusResident" : "pending",
        },
        {
            "sequential" : 2,
            "name" : "Resident 2",
            "statusResident" : "not analyzed"
        },
        {
            "sequential" : 3,
            "name" : "Resident 3",
            "statusResident" : "not analyzed"
        },
        {
            "sequential" : 4,
            "name" : "Resident 4",
            "statusResident" : "finished"
        }
    ]
}

{
    "_id" : ObjectId("882b99b0f2bd3f64xxc30ec8"),
    "agency" : "AG2",
    "year" : "2022",
    "month" : "9",
    "residents" : [
        {
            "sequential" : 1,
            "name" : "Resident 10",
            "statusResident" : "pending",
        },
        {
            "sequential" : 2,
            "name" : "Resident 20",
            "statusResident" : "not analyzed"
        }
    ]
}

我想进行一个返回类似于 SQL SELECT agency, statusResident, COUNT(*) FROM interviews GROUP BY agency, statusResident 的查询。

对于上面的这些文件,这将返回类似

AG1     pending        1
AG1     not analyzed   2
AG1     finished       1
AG2     pending        1
AG2     not analyzed   1

我运行了以下查询,但它们没有返回我需要的内容:

db.interviews.aggregate([
                 { $group: { _id: { agency: "$agency", statusResident: "$residents.statusResident", total: { $sum: "$residents.statusResident" } } } },
                 { $sort: { agency: 1 } } 
               


db.interviews.group({
    key:{agency:1, "residents.statusResident":1},
    cond:{year:2022},
    reduce:function(current, result)
       {
         result.total += 1;
       },
         initial:{total:0}
       })

我查阅了帖子“MongoDB SELECT COUNT GROUP BY”和“Select count group by mongodb”以及 MongoDB 文档,但无济于事。我应该运行什么查询来获得与我想要的结果相似的结果?

【问题讨论】:

    标签: mongodb


    【解决方案1】:

    试试这个

    db.collection.aggregate([
      { $unwind: "$residents" },
      {
        $group: {
          _id: {
            agency: "$agency",
            statusResident: "$residents.statusResident",
            total: { $sum: 1 }
          }
        }
      },
      { $sort: { agency: 1 } }
    ])
    

    Mongo Playground

    【讨论】:

      【解决方案2】:

      你可以试试这个查询:

      • 首先$unwind解构数组,也可以按statusResident分组。
      • 然后 $group 两个值,agencystatusResident
      • 最后阶段是$project以获得更易于阅读的输出。
      db.collection.aggregate([
        {
          "$unwind": "$residents"
        },
        {
          "$group": {
            "_id": {
              "agency": "$agency",
              "statusResident": "$residents.statusResident"
            },
            "total": {
              "$sum": 1
            }
          }
        },
        {
          "$project": {
            "_id": 0,
            "agency": "$_id.agency",
            "statusResident": "$_id.statusResident",
            "total": 1
          }
        }
      ])
      

      例子here

      【讨论】:

        猜你喜欢
        • 2020-08-15
        • 2021-12-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-22
        • 2016-08-14
        • 1970-01-01
        相关资源
        最近更新 更多