【问题标题】:mongodb with groupby with multi filed countmongodb 与 group by 多字段计数
【发布时间】:2019-06-13 23:08:47
【问题描述】:

MongoDB,我有一个这样的集合

/* 1 */
{
    "_id" : ObjectId("5d02308e129aab55b3df814a"),
    "title" : "fgdfg",
    "user_id" : "5bc5dc03f6d24d29077dd362",
    "click" : false,
    "type_id" : "5d00a304430fee3160ac881f",
    "type" : "user_notification",
    "__v" : 0
}

/* 2 */
{
    "_id" : ObjectId("5d02308e129aab55b3df8149"),
    "title" : "fgdfg",
    "user_id" : "5bc5dc03f6d24d29077dd362",
    "click" : true,
    "type_id" : "5d00a304430fee3160ac881f",
    "type" : "user_notification",
    "__v" : 0
}

/* 3 */
{
    "_id" : ObjectId("5d02308e129aab55b3df8148"),
    "title" : "fgdfg",
    "user_id" : "5bc5dc03f6d24d29077dd362",
    "click" : true,
    "type_id" : "5d00a304430fee3160ac881f",
    "type" : "user_notification",
    "__v" : 0
}

我想用“type_id”分组查询和相同的查询我想要type_id的多少“点击”字段真假。

结论:我想要单个查询中每个类型 ID 中的总 type_id 计数和总“点击”字段“true”计数。

【问题讨论】:

    标签: mongodb mongoose mongodb-query aggregation-framework


    【解决方案1】:

    您可以使用 MongoDB Group,

    let query = [{
        $group: {
            _id: "$type_id",
            "true": { $sum: { $cond: [{ $eq: ['$click', true] }, 1, 0] } },
            "false": { $sum: { $cond: [{ $eq: ['$click', false] }, 1, 0] } },
    
        },
    }, {
        $addFields: {
            "addition": { $add: ["$true", "$false"] }
        }
    }]
    

    【讨论】:

    • 我得到了以下结果 { "status": 1, "message": "Data found", "data": [ { "_id": "5d00a304430fee3160ac881f", "true": 1, " false": 2 } ] } 单击 true 和 false 计数工作完美。但我无法获得总的“type_id”记录
    • 让查询 = [{ $group: { _id: "$type_id", "true": { $sum: { $cond: [{ $eq: ['$click', true] } , 1, 0] } }, "false": { $sum: { $cond: [{ $eq: ['$click', false] }, 1, 0] } }, count: { $sum: 1 } } }] 我添加了 "count: { $sum: 1 }" 并且它正在工作
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-14
    • 2018-10-28
    • 2014-05-27
    • 2020-11-03
    • 1970-01-01
    • 2013-11-02
    相关资源
    最近更新 更多