首页 > 解决方案 > 修改查询以获得预期结果

问题描述

我正在尝试修改查询以获得预期的输出。我能够编写查询但没有按预期获得输出,以便我可以在前端绑定。

实际输出:-

{
    "_id" : null,
    "first" : 3571.0,
    "second" : 24.0
}

预期输出:-

{    "_id" : null,
    "opertion":edit,
    "count" : 3571.0,
}
{    "_id" : null,
    "opertion":read,
    "count" : 24,
}
{    "_id" : null,
    "opertion":update,
    "count" : 9000,
}

我的查询:-

db.getCollection('blog').aggregate([
  { "$group": {
    "_id": null,
    "first": {
      "$sum": {
        "$cond": [{ "$in": ["$Operation", ["edit1", "edit2"]] }, 1, 0]
      }
    },
    "second": {
      "$sum": {
        "$cond": [{ "$in": ["$Operation", ["read1", "read2"]] }, 1, 0]
      }
    }
  },
},

])

标签: javascriptdatabasemongodb

解决方案


如果您有如下收藏:

[
{
    "_id" : 1,
    "operation" : "edit1" # some extra fields 
},
{
    "_id" : 2,
    "operation" : "read1"
},
{
    "_id" : 3,
    "operation" : "update1"
}
]

通过使用 $project 和 $cond,您可以将“read1”、“read2”重命名为read或更新为update,或编辑为,edit 然后通过对新操作字段进行分组,您可以获得每个操作的计数。你可以使用这个查询:


db.aggregate([
    {
        "$project": {
            "new_operation":
            {
                "$cond": [
                    {"$in":
                         ["$Operation", ["edit1", "edit2"]]
                    }, "edit", {
                        "$cond": [
                            {"$in":
                                 ["$operation", ["read1", "read2"]]
                            }, "read", "update"]
                    }
                ]
            }
        }
    },
    {
        "$group": {
            "_id": "$new_operation",
            "count": {"$sum": 1}
        }
    }
])

推荐阅读