繁体   English   中英

如何在 mongodb 中查找嵌入式嵌套数组的长度?

[英]How to find length of embedded nested array in mongodb?

如何在 mongodb 中查找嵌入式嵌套数组的长度? 例如,我的 mongoDB 中有以下集合。 loc 字段包含坐标字段,它是一个数组,它再次包含另一个位于第 0 个索引中的数组。 如何找到 loc.corrdinates[0] 的长度? 我尝试使用聚合管道来做到这一点,但它给出了语法错误:

db.atolldata.aggregate([
                        {$project:{_id:0,
                                   fileName:1,
                         sizeOfArray:{$size:"$loc.coordinates[0]"}}}]); 

.

这是我的收藏

db.mydb.findOne();

{
    "_id" : ObjectId("54ccb36fe4b0ff85abfee006"),
    "_class" : "com.inn.signaleye.model.AtollData",
    "rsrp" : "-124",
    "index" : 1,
    "rgb" : [
        192,
        157,
        0
    ],
    "loc" : {
        "type" : "Polygon",
        "coordinates" : [
            [
                [
                    91.5254213240325,
                    26.225096
                ],
                [
                    91.5254099392226,
                    26.225999
                ],
                [
                    91.52591034644685,
                    26.226004
                ],
                [
                    91.52592172739666,
                    26.225101
                ],
                [
                    91.5254213240325,
                    26.225096
                ]
            ]
        ]
    },
    "fileName" : "RSRP_ZOne46N_20m_SCFT.shp"
}

利用$ unwind阶段,将coordinates数组展平,然后在$project阶段中找到size

db.atolldata.aggregate([
{$unwind:"$loc.coordinates"},
{$project:{"_id":0,"fileName":1,
           "sizeOfArray":{$size:"$loc.coordinates"}}}
])

您可能希望创建一个具有数组大小的字段来使用它:

{$set : {arraySize: {$size: {$arrayElemAt : ['$loc.coordinates', 0]}}}}

请记住,所有文档都必须包含 loc 字段,否则聚合将失败(因此您必须先使用 $match 过滤这些文档)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM