Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MongoDB-对数组中的嵌套文档进行计数的查询_Mongodb_Mongodb Query - Fatal编程技术网

MongoDB-对数组中的嵌套文档进行计数的查询

MongoDB-对数组中的嵌套文档进行计数的查询,mongodb,mongodb-query,Mongodb,Mongodb Query,MongoDB-布局 我是MongoDB的新手,所以请原谅我使用了错误的术语 鉴于上述布局(附图),我需要提出两个问题: 用例1:一种查询,用于输出给定文档标识符的someArrayField下的元素总数。 例如,对于上面的布局,我希望查询为someArrayField返回2,因为它下面有2个元素作为嵌套文档 用例2:一个查询,该查询将为集合1下的每个文档输出someArrayField下的元素总数(集合1可以包含具有类似布局的多个文档) 我知道,我需要以某种方式使用“聚合管道”来获得期望的结

MongoDB-布局

我是MongoDB的新手,所以请原谅我使用了错误的术语

鉴于上述布局(附图),我需要提出两个问题:

用例1:一种查询,用于输出给定文档标识符的someArrayField下的元素总数。 例如,对于上面的布局,我希望查询为someArrayField返回2,因为它下面有2个元素作为嵌套文档

用例2:一个查询,该查询将为
集合1
下的每个文档输出someArrayField下的元素总数(
集合1
可以包含具有类似布局的多个文档)

我知道,我需要以某种方式使用“聚合管道”来获得期望的结果,但是由于缺乏NoSQL的经验,我在这里有些挣扎


因此,非常感谢您的帮助

给定以下测试集:

    { 
    "_id" : ObjectId("5b453cc7799fb211dc44a1e8"), 
    "id" : 1.0, 
    "nestedDoc" : {
        "nestedArray" : [
            {
                "field1" : "value1", 
                "field2" : "value2", 
                "field3" : "value3"
            }, 
            {
                "field1" : "value11", 
                "field2" : "value21", 
                "field3" : "value31"
            }, 
            {
                "field1" : "value12", 
                "field2" : "value22", 
                "field3" : "value32"
            }
        ]
    }
}
{ 
    "_id" : ObjectId("5b453d23799fb211dc44a1e9"), 
    "id" : 2.0, 
    "nestedDoc" : {
        "nestedArray" : [
            {
                "field1" : "value1", 
                "field2" : "value29", 
                "field3" : "value39"
            }, 
            {
                "field1" : "value118", 
                "field2" : "value281", 
                "field3" : "value381", 
                "field4" : "value281"
            }, 
            {
                "field1" : "value172", 
                "field2" : "value272", 
                "field3" : "value372"
            }
        ]
    }
}
用例1: 运行以下聚合查询:

db.test1.aggregate(
    [
        // Stage 1 : filter documents
        {
            $match: {
            id:1
            }
        },
        // Stage 2 : count array size and return only it.
        {
            $project: {
                arraySize:{$size:"$nestedDoc.nestedArray"},
                _id:0
            }
        },
    ]
);
**用例2**运行以下命令:

db.test1.aggregate(
    [
        // Stage 1 count array size for each document
        {
            $project: {
                _id:0,
                arraySize:{$size:"$nestedDoc.nestedArray"}
            }
        },
        // Stage 2 group all documents and sum arraySize
        {
            $group: {
            _id:null,
            totalArraysSize:{$sum:"$arraySize"}
            }
        },
    ]
);

太好了这就是我想要的用例1。然而,我试图调整你的用例2解决方案,以获得每个文档的计数,但未能成功完成。好吧,我误解了用例2。如果需要每个文档的数组大小,只需删除组阶段。