如何计算mongoDB中嵌入的数组对象元素

如何计算mongoDB中嵌入的数组对象元素,mongodb,mongodb-query,nosql,aggregation-framework,Mongodb,Mongodb Query,Nosql,Aggregation Framework,我有订单收集,其中文档采用这种格式。我想得到有可退货标志的产品总数。e、 g:对于上述订单,计数应为2。我对MongoDB非常陌生,我想知道如何编写查询以找到答案,我尝试了一些方法,但没有帮助: 这就是我尝试过但没有成功的地方: { "orderNo": "123", "bags": [{ "type": "small", "

我有订单收集,其中文档采用这种格式。我想得到有可退货标志的产品总数。e、 g:对于上述订单,计数应为2。我对MongoDB非常陌生,我想知道如何编写查询以找到答案,我尝试了一些方法,但没有帮助: 这就是我尝试过但没有成功的地方:

{
    "orderNo": "123",
    "bags": [{
            "type": "small",
            "products": [{
                    "id": "1",
                    "name": "ABC",
                    "returnable": true
                }, {
                    "id": "2",
                    "name": "XYZ"
                }
            ]
        },{
            "type": "big",
            "products": [{
                    "id": "3",
                    "name": "PQR",
                    "returnable": true
                }, {
                    "id": "4",
                    "name": "UVW"
                }
            ]
        }
    ]
}

对于内部数组,您可以使用它来检查returnable标志并获取此类项的数量。对于外部数组,可以利用它对内部数组的值求和:

db.orders.aggregate([
     { "$unwind": "$bags" },
     { "$unwind": "$bags.products" },
     { "$unwind": "$bags.products.returnable" },
     
     { "$group": {
         "_id": "$bags.products.returnable",
         "count": { "$sum": 1 }
     }}
 ])

对于内部数组,您可以使用它来检查returnable标志并获取此类项的数量。对于外部数组,可以利用它对内部数组的值求和:

db.orders.aggregate([
     { "$unwind": "$bags" },
     { "$unwind": "$bags.products" },
     { "$unwind": "$bags.products.returnable" },
     
     { "$group": {
         "_id": "$bags.products.returnable",
         "count": { "$sum": 1 }
     }}
 ])

您的预期结果是什么?您的预期结果是什么?非常感谢,一个小问题:如果我希望计数基于“可返回”属性而不是其真/假值,该怎么办。@Souma您可以这样尝试:非常感谢,1个小问题:如果我希望计数基于“returnable”属性,而不是其真/假值,该怎么办。@Souma您可以这样尝试: