当前位置: 首页 > 知识库问答 >
问题:

对聚合选择中的结果进行计数

马渊
2023-03-14

我的MongoDB数据库有一个结构


    {
        "_id" : ObjectId("5c1ccc20fc0f60769227d455"),
        "type" : 0,
        "id" : "hwJyzAHyfjXUlrGhblT7txWd",
        "userowner" : 1.0,
        "campid" : "9548",
        "date" : 1545391136,
        "useragent" : "mozilla/5.0 (windows nt 10.0; win64; x64; rv:65.0) gecko/20100101 firefox/65.0",
        "domain" : "",
        "referer" : "",
        "country" : "en",
        "language" : "en-US",
        "languages" : [ 
            "en-US", 
            "en"
        ],
        "screenres" : [ 
            "1920*1080"
        ],
        "avscreenres" : [ 
            "1080*1858"
        ],
        "webgl" : "angle (nvidia geforce gtx 1060 6gb direct3d11 vs_5_0 ps_5_0)",
        "hash" : 123,
        "timezone" : -180,
        "result" : true,
        "resultreason" : "learning",
        "remoteip" : "0.0.0.0"
    }

每个a文档都有一个带有bool值vield“result”。我进行聚合选择:


    db.getCollection('clicks').aggregate([
        { $match: {userowner: 1, date:{$gte: 0, $lte: 9545392055}} },
        { $group : {_id : "$campid",
                number: {$sum: 1}}}
    ])

并得到一个结果:


    /* 1 */
    {
        "_id" : "4587",
        "number" : 2.0
    }

    /* 2 */
    {
        "_id" : "9548",
        "number" : 1346.0
    }

如何计算字段“result”中值“true”和“false”的数量,并得到如下结果:


    /* 1 */
    {
        "_id" : "4587",
        "number" : 2.0,
        "passed":100,
        "blocked":120
    }

    /* 2 */
    {
        "_id" : "9548",
        "number" : 1346.0,
        "passed":100,
        "blocked":120
    }

共有1个答案

訾俊名
2023-03-14

我希望这能按照你的要求工作。

db.getCollection('clicks').aggregate(
[
    {
        $match: {
            userowner: 1, date: {
                $gte: 0, $lte: 9545392055
            }
        }
    },
    {
        $group: {
            _id: "$campid", passed: {
                $sum: {
                    $cond:
                        [
                            { $eq: ["$result", true] },
                            1, 0
                        ]
                }
            },
            blocked: {
                $sum: {
                    $cond:
                        [
                            {
                                $eq: ["$result", false]
                            }

                            , 1, 0]
                }
            },
            number: { $sum: 1 }
        }
    },
    {
        $project: {
            _id: 0,
            campid: "$_id",
            number: 1,
            passed: 1,
            blocked: 1
        }
    }

])

输出:-

{ 
    "passed" : 3,
    "blocked" : 2, 
    "number" : 5,
    "campid" : "4587"
}
{
    "passed" : 2, 
    "blocked" : 1, 
    "number" : 3, 
    "campid" : "9548" 
}

有关更多信息,请参阅$GROUP、$COND和$EQ。

 类似资料:
  • 问题内容: 根据上述问题,我用Val给定的脚本进行的elasticsearch查询在最后一周之前都可以正常工作。我们已经升级了ES版本,但突然停止了工作。 现在突然我的ES停止使用脚本中包含“ as Integer”的代码。任何人都可以检查和帮助。 我尝试了给定的查询,现在它抛出以下异常。 我作为参数传递的查询是: 由于我的索引器在该字段中包含1、2、4、6、14个值。但是执行完此查询后,我只得到

  • 我想在多个字段上进行日期直方图/范围聚合,并将结果存储在其他集合/索引中。因此,我可以在小时范围内使用查询/聚合使doc_count和。 聚合如下: 结果不出所料: 假设我解析了响应,并尝试将结果存储在其他索引/集合中。 存储聚合结果的最佳方式是什么,这样我就可以进行其他查询/聚合,以求和不同小时范围之间的“doc_count”? 例如:在“2016-07-17t00:00.000z”-“2016

  • 我有一个数据库,里面有澳大利亚800家不同的酒吧、俱乐部和餐馆。 我想为我的网站建立一个链接列表,统计不同郊区和主要类别的不同场馆的数量。 像这样: 餐厅,伯恩山(15家) 餐厅,道斯角(6家) 俱乐部,悉尼(138家) 我可以通过首先获得所有场馆来艰难地完成这项任务。然后运行一个场地。distinct('details.location.Suburban')获得所有独特的郊区。 从这里,我可以运

  • 问题内容: 表格如下: 我想获取班级列表,以及每个班级-属于每个班级的学生人数。我怎样才能做到这一点? 问题答案: 您需要这样做-

  • 我使用criteriaBuilder为特定类型创建criteriaQuery。 我需要在使用EntityManager的createQuery方法时限制查询的结果。 但我也需要知道有多少结果我可以得到没有限制,因为我需要它来计算页数的分页系统。 所以我使用了另一个criteriaQueryObject来创建一个选择计数

  • 我有以下JPA实体(getter、setter和非相关字段省略): 我的目标是使用JPQL或criteriaAPI实现查询,它将返回每天的平均事务量和最大事务量。 产生预期结果的原生SQL查询(MySQL数据库)如下所示: 遗憾的是,不鼓励使用本机 SQL 查询,并且 JPQL 不允许在 where 子句中使用子查询。 提前谢谢你。 附加: 我从以下Spring数据查询开始: 但显然没有用: 我可