如何计算嵌入式mongodb文档中的键数

Posted

技术标签:

【中文标题】如何计算嵌入式mongodb文档中的键数【英文标题】:how to count number of keys in embedded mongodb document 【发布时间】:2017-08-12 15:39:55 【问题描述】:

我有一个 mongodb 查询:(给我 account='test' 的设置)

db.collection_name.find("account" : "test1", settings : 1).pretty();

我得到以下示例输出:


    "_id" : ObjectId("49830ede4bz08bc0b495f123"),
    "settings" : 
        "clusterData" : 
            "us-south-1" : "cluster1",
            "us-east-1" : "cluster2"
        ,
    ,

我现在正在寻找的是给我clusterData 拥有多个密钥的帐户。

我只对列出具有 (2) 个或更多密钥的帐户感兴趣。

我试过这个:(但这不起作用

db.collection_name.find('settings.clusterData.1': $exists: true, account : 1).pretty();

这可能与当前的数据结构有关吗?我没有重新设计此架构的选项。

【问题讨论】:

你看过***.com/questions/7811163/…吗? 【参考方案1】:

您的 clusterData 字段不是数组,这就是为什么您不能只过滤它拥有的元素数量的原因。但是,有一种方法可以通过聚合框架获得您想要的东西。试试这个:

db.collection_name.aggregate(
    $match: 
        "account" : "test1"
    
, 
    $project: 
        "settingsAsArraySize":  $size:  $objectToArray: "$settings.clusterData"  ,
        "settings.clusterData": 1
    
, 
    $match: 
        "settingsAsArraySize":  $gt: 1  
    
, 
    $project: 
        "_id": 0,
        "settings.clusterData": 1
    
).pretty();

【讨论】:

以上是关于如何计算嵌入式mongodb文档中的键数的主要内容,如果未能解决你的问题,请参考以下文章

如何计算匹配模式的键数?

如何在 Perl 中找到哈希中的键数?

如何匹配 MongoDB 中嵌入式数组或文档中的字符串?

如何在 Lua 中获取哈希表中的键数?

如何使用 mongodb 中的聚合在嵌入文档的数组中执行操作?

如何在 mongoDB 中存储地理空间信息