2015-12-29 25 views
0

我有一個文件,看起來像這樣:如何獲取一個字段的密鑰的文件中MongoDB中

{ 
    'id': 123, 
    'somekey': { 
     'x': [], 
     'y': [], 
     'z': [], 
    } 
} 

我想要得到的結果爲:
['x', 'y', 'z']。什麼是相關的查詢來實現這一目標?

+0

可能使用'mapReduce'。 – styvane

+0

mapReduce僅適用於文檔的鍵。但是在這種情況下,'x','y','z'是可變的 – harshatba

+0

*'x','y','z'*是什麼意思?你能詳細說明一下嗎? – styvane

回答

3

相關查詢通過Map-Reduce。下面精簡操作將填充一個單獨的集合與somekey子文檔的所有鍵爲_id值:

var map = function() { 
     for (var key in this.somekey) { 
      emit(key, null); 
     } 
    }, 
    reducer = function(key, stuff) { return null; }, /* or do reducer = function(key, stuff) { } since it's not doing anything */ 
    mapreduce = db.runCommand({ 
     "mapreduce": "collectionName", 
     "map": map, 
     "reduce": reducer, 
     "out": "someKeyCollectionKeys" 
    }); 

您可以通過所產生的集合運行不同得到的所有動態子文檔鍵列表:

db[mapreduce.result].distinct("_id") 

輸出

[ "x", "y", "z" ] 
+1

你可以做'reducer = function(key,stuff){}'因爲它沒有做任何事情 – styvane

+0

@ user3100115爲建議歡呼! :) – chridam

相關問題