MongoDB - 查询计算数组中的嵌套文档

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MongoDB - 查询计算数组中的嵌套文档相关的知识,希望对你有一定的参考价值。

MongoDB - 布局

MongoDB - Layout

我是MongoDB的新手,如果我在这里使用错误的术语,请原谅我。

鉴于上面的布局(附图),我需要提出两个查询:

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

用例2:一个查询,它将在Collection_1下为someArrayField输出每个文档下的元素总数(Collection_1可以包含具有相似布局的多个文档)。

我知道,我需要以某种方式使用“Aggregation Pipeline”来获得理想的结果,但由于缺乏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"}
            }
        },
    ]
);

以上是关于MongoDB - 查询计算数组中的嵌套文档的主要内容,如果未能解决你的问题,请参考以下文章

mongodb aggregate

将查询构建器条件转换为 MongoDB 操作,包括嵌套的子文档数组

MongoDB计算最常见的嵌套数组

MongoDB $and 仅当 $and 在文档的同一数组索引中为真时才查询 - 特别是对于双重嵌套数组 [重复]

在 MongoDb 中查询嵌套数组

MongoDB:如何查询嵌套数组?