2016-07-31 95 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