【问题标题】:mongoDB Array length on children element [duplicate]子元素上的mongoDB数组长度[重复]
【发布时间】:2018-04-07 00:12:48
【问题描述】:

我的 mongo DB 中有一个类似于以下的数据。显然,array1 的长度是 2,我正在寻找一种方法来用 mongo db 脚本计算这种数组的长度。谢谢

{
        "_id" : ObjectId("65465465465465465468"),
        "header" : {
                "test" : "test",
        },
        "value" : 11.763548134011048,
        "array1" : [
                {
                        "q" : {
                                "value" : 250
                        }
                },
                {
                        "q" : {
                                "value" : 30,
                        }
                }
        ],
        "array2" : [ ]
}

【问题讨论】:

    标签: arrays mongodb size


    【解决方案1】:

    您可以使用$size 聚合运算符。

    鉴于您在 OP 中显示的文档,以下命令...

    db.collection.aggregate(
       [
          {
             $project: {          
                sizeOfArray1: { $size: "$array1" }
             }
          }
       ]
    )
    

    ... 将返回:

    {
        "_id" : ObjectId("65465465465465465468"),
        "sizeOfArray1" : 2
    }
    

    此方法适用于所有版本的 Mongo >= 2.6

    更新:回应此评论...

    如果我有更多嵌套对象,直到我到达我的数组,我可以使用它们相同的代码,我只需将字段名称更改为我感兴趣的项目?

    您使用带有. 的路径表示法来处理任何文档属性,以表示每个“级别”。因此,如果您的文档如下所示:

    {
            "_id" : ObjectId("65465465465465465468"),
            "header" : {
                    "test" : "test",
                    "array" : [1, 2, 3]
            },
            "value" : 11.763548134011048,
            "array1" : [
                    {
                            "q" : {
                                    "value" : 250
                            }
                    },
                    {
                            "q" : {
                                    "value" : 30,
                            }
                    }
            ],
            "array2" : [ ]
    }
    

    ...那么以下命令将返回header 嵌套子文档内的array 字段的计数:

    db.collection.aggregate(
       [
          {
             $project: {          
                sizeOfHeaderArray: { $size: "$header.array" }
             }
          }
       ]
    )
    

    所以,也许您现在可以看到您将使用header.array 来处理header 嵌套子文档中的array 字段。

    希望对您有所帮助。

    【讨论】:

    • 感谢故障。只是它看起来不是很直观。如果我有更多嵌套对象,直到我到达我的数组,我可以使用它们相同的代码,我只需将字段名称更改为我感兴趣的项目?
    猜你喜欢
    • 2021-04-06
    • 2013-02-18
    • 2020-03-22
    • 1970-01-01
    • 2021-02-18
    • 2022-01-05
    • 2018-12-10
    • 2014-07-01
    • 2020-04-18
    相关资源
    最近更新 更多