2017-08-12 73 views
0

我有一个MongoDB的查询号码:(给我的设置,其中帐户=“测试”)如何计算嵌入式MongoDB的文档键

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

在那里我得到下面的示例输出:

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

我现在要找的是给我clusterData有1个以上键的帐号。

我只想列出这些帐户(2)或更多的密钥。

我已经试过这样:(但这不起作用

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

这是可以做到与当前的数据结构?我没有选择重新设计这个模式。

+0

你看过https://stackoverflow.com/questions/7811163/query-for-documents-where-array-size-is-greater-than-1? – jeanr

回答

0

你的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();