在MongoDB中使用聚合框架按特定的嵌套字段值对文档进行计数

半血王子

这是我的数据库。

{
"_id" : ObjectId("579cab6c6aba30f42a57a979"),
"iecode" : "P1111",
"country" : "India",
"totalTreatmentArms" : 3,
"treatmentArms" : [ 
    {
        "mechanismOrPkg" : "Mechanism",
        "mechanism" : "mechanism1"
    }, 
    {
        "mechanismOrPkg" : "Mechanism",
        "mechanism" : "mechanism2"
    }, 
    {
        "mechanismOrPkg" : "Package",
        "mechanism" : "mechanism1"
    }
]
}


{
"_id" : ObjectId("579cab7a6aba30f42a57a97a"),
"iecode" : "P1111",
"country" : "Canada",
"totalTreatmentArms" : 3,
"treatmentArms" : [ 
    {
        "mechanismOrPkg" : "Mechanism",
        "mechanism" : "mechanism1"
    }, 
    {
        "mechanismOrPkg" : "Mechanism",
        "mechanism" : "mechanism2"
    }, 
    {
        "mechanismOrPkg" : "Package",
        "mechanism" : ""
    }
]
}


{
"_id" : ObjectId("579cabac6aba30f42a57a97b"),
"iecode" : "P2222",
"country" : "India",
"totalTreatmentArms" : 1,
"treatmentArms" : [ 
    {
        "mechanismOrPkg" : "Package",
        "mechanism" : ""
    }
]
}


{
"_id" : ObjectId("579cabe76aba30f42a57a97c"),
"iecode" : "P3333",
"country" : "India",
"totalTreatmentArms" : 2,
"treatmentArms" : [ 
    {
        "mechanismOrPkg" : "Mechanism",
        "mechanism" : "mechanism1"
    }, 
    {
        "mechanismOrPkg" : "Package",
        "mechanism" : ""
    }
]
}

请注意,有两个记录,iecode : P1111并且我希望区分结果,iecode因此仅考虑一个记录(任何一个)。

现在我的要求是我要依靠现场mechanismOrPkg如果它包含值,Package那么我们将加package一。如果值为,Mechanism那么我们将考虑字段的值,并将考虑mechanism其尊重的价值。

所以最终结果将是这样

{
"_id" : null,
"totalPackage" : 3,
"totalMechanism1" : 2,
"totalMechanism2" : 1
}

请询问是否听起来令人困惑。让我知道,即使查询可以进行这种聚合,还是必须进行服务器端过滤?

谢谢。

编辑

mechanismOrPkg的可能值:包或机制

机械装置的可能值:机械装置1或机械装置2

克列丹

要实现上述要求,就需要$cond$sum累加器运算符中使用该运算符。$cond运营商将评估基于其第一个参数(如果)的逻辑条件,然后返回,其中评价是真实的(当时)的第二个参数或第三个参数,其中假(否则)。这会将true/false逻辑转换为$sum分别馈入的1和0数值因此,例如,当您要汇总“ Package”值的计数时,逻辑如下:

{
    "$sum": { 
        "$cond": [ { "$eq": [ "$treatmentArms.mechanismOrPkg", "Package" ] }, 1, 0 ]
    }
}

作为结果管道,您需要运行聚合操作

db.collection.aggregate([
    {
        "$group": {
            "_id": "$iecode",
            "treatmentArms": { "$first": "$treatmentArms" }
        }
    },
    { "$unwind": "$treatmentArms" },
    {
        "$group": {
            "_id": null,
            "totalPackage": { 
                "$sum": { 
                   "$cond": [ 
                       { "$eq": [ "$treatmentArms.mechanismOrPkg", "Package" ] }, 
                       1, 0
                    ] 
                }
            },
            "totalMechanism1":{
                "$sum": { 
                   "$cond": [ 
                        { 
                            "$and": [
                                { "$eq": [ "$treatmentArms.mechanismOrPkg", "Mechanism" ] },
                                { "$eq": [ "$treatmentArms.mechanism", "mechanism1" ] }
                            ]
                        }, 
                        1, 
                        0 ]
                }
            },
            "totalMechanism2": { 
                "$sum": { 
                   "$cond": [ 
                        { 
                            "$and": [
                                { "$eq": [ "$treatmentArms.mechanismOrPkg", "Mechanism" ] },
                                { "$eq": [ "$treatmentArms.mechanism", "mechanism2" ] }
                            ]
                        }, 
                        1, 
                        0 ]
                }
            }
        }
    }
])

样本输出

{
    "_id" : null,
    "totalPackage" : 3,
    "totalMechanism1" : 2,
    "totalMechanism2" : 1
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何按MongoDB中的特定字段对文档进行分组

来自分类Dev

MongoDB-按字段值对文档进行分组

来自分类Dev

mongodb聚合框架按嵌套文档匹配

来自分类Dev

mongodb聚合框架按嵌套文档匹配

来自分类Dev

如何使用Java在MongoDB中按字段对文档分组和计算计数

来自分类Dev

在MongoDB中使用随机键按嵌套文档值查找

来自分类Dev

在MongoDB中使用随机键按嵌套文档值查找

来自分类Dev

MongoDB按数组中的值对文档进行排序

来自分类Dev

MongoDb查询,用于按值对文档进行排序

来自分类Dev

MongoDb使用多个嵌套数组对文档进行排序

来自分类Dev

Mongo聚合:根据数组字段匹配条件对文档进行计数

来自分类Dev

MongoDB聚合管道:计数文档中的字段是否小于值?

来自分类Dev

使用聚合框架按子文档字段分组

来自分类Dev

使用聚合框架 MongoDB 从嵌套字段创建新字段

来自分类Dev

Elasticsearch如何使用聚合对多个文档字段中的值进行计数

来自分类Dev

Elasticsearch如何使用聚合对多个文档字段中的值进行计数

来自分类Dev

在MongoDB聚合框架中使用多个字段按相关性排序

来自分类Dev

按嵌套文档之一中的值对文档进行排序

来自分类Dev

使用 MongoDB 中的聚合框架进行分组和计数

来自分类Dev

MongoDB聚合:在$ match $或查询中使用当前文档的字段值

来自分类Dev

如何使用聚合检查MongoDB数据库中的所有文档的特定字段的最新值?

来自分类Dev

mongodb 使用计数在整个集合中聚合嵌套值

来自分类Dev

MongoDB聚合嵌套子文档字段

来自分类Dev

根据ElasticSearch中的嵌套子计数对文档进行排序

来自分类Dev

Mongodb:按数组最后一个元素中的值对文档进行排序

来自分类Dev

mongo如何按组字段对文档进行分组

来自分类Dev

按内部字段字符串对文档进行排序

来自分类Dev

在聚合框架中使用索引-了解文档

来自分类Dev

使用MongoDB聚合管道计数文档

Related 相关文章

  1. 1

    如何按MongoDB中的特定字段对文档进行分组

  2. 2

    MongoDB-按字段值对文档进行分组

  3. 3

    mongodb聚合框架按嵌套文档匹配

  4. 4

    mongodb聚合框架按嵌套文档匹配

  5. 5

    如何使用Java在MongoDB中按字段对文档分组和计算计数

  6. 6

    在MongoDB中使用随机键按嵌套文档值查找

  7. 7

    在MongoDB中使用随机键按嵌套文档值查找

  8. 8

    MongoDB按数组中的值对文档进行排序

  9. 9

    MongoDb查询,用于按值对文档进行排序

  10. 10

    MongoDb使用多个嵌套数组对文档进行排序

  11. 11

    Mongo聚合:根据数组字段匹配条件对文档进行计数

  12. 12

    MongoDB聚合管道:计数文档中的字段是否小于值?

  13. 13

    使用聚合框架按子文档字段分组

  14. 14

    使用聚合框架 MongoDB 从嵌套字段创建新字段

  15. 15

    Elasticsearch如何使用聚合对多个文档字段中的值进行计数

  16. 16

    Elasticsearch如何使用聚合对多个文档字段中的值进行计数

  17. 17

    在MongoDB聚合框架中使用多个字段按相关性排序

  18. 18

    按嵌套文档之一中的值对文档进行排序

  19. 19

    使用 MongoDB 中的聚合框架进行分组和计数

  20. 20

    MongoDB聚合:在$ match $或查询中使用当前文档的字段值

  21. 21

    如何使用聚合检查MongoDB数据库中的所有文档的特定字段的最新值?

  22. 22

    mongodb 使用计数在整个集合中聚合嵌套值

  23. 23

    MongoDB聚合嵌套子文档字段

  24. 24

    根据ElasticSearch中的嵌套子计数对文档进行排序

  25. 25

    Mongodb:按数组最后一个元素中的值对文档进行排序

  26. 26

    mongo如何按组字段对文档进行分组

  27. 27

    按内部字段字符串对文档进行排序

  28. 28

    在聚合框架中使用索引-了解文档

  29. 29

    使用MongoDB聚合管道计数文档

热门标签

归档