2016-07-31 99 views
-1

只返回鍵我有一個文件如下:貓鼬:從文件

var data={"john:"friend", 
      "fruit":"banana", 
      "tv":[{"livingroom":"led", 
        "bedroom":"lcd" 
        "fruit":"banana"}]} 

,我試圖如下返回其所有獨特的按鍵陣列:

["john","fruit,livingroom,bedroom] 

所以我有下面的代碼:

var mykeys=[]; 
database.find({},function(result){ 
    result.forEach(function(each){ 
     for (key in each){ 
      mykeys.push(key) 
     }; 
    }}); 

但這返回一大堆我不需要像對象:

[$__, isNew, errors, _doc, $__original_save, save, _pres, _posts....] 

是否有反正我可以擺脫這些不在文件中的密鑰? 我知道這mapreduce這裏的答案MongoDB get the names of all the keys in a MongoDB collection但我不知道如何將它翻譯成貓鼬。 AFAIK貓鼬不支持runCommand。

+3

的[MongoDB中獲取集合的所有鍵的名稱(http://stackoverflow.com/questions/2298870/mongodb-get-names-of-all-keys-in-collection) –

+0

可能的複製@ Bertrand Martel:我的確看過這個解決方案,但它對於我想要的來說似乎太複雜了。我不需要在集合中找到唯一的鍵,只需要在文檔中找到沒有虛擬物的所有鍵。另外我不太確定如何在貓鼬中實現mapreduce。 – qts

+0

你的意思是你想從你的集合中的一個文檔(任何文檔)中提取密鑰? –

回答

4

您必須使用_doc屬性,因爲這包含您的實際文檔。另外,您可以使用Object.keys來獲取屬性列表。

var mykeys; 
database.findOne({}, function(result) { 
    mykeys = Object.keys(result._doc); 
}); 
+0

這個答案很有用,但我只是意識到我在我的文檔中有一個子數組,這似乎在搞亂這個:-(所以我已經提出了你的答案並且按問題編輯。 – qts