2017-08-12 69 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();