mongoose:仅返回文档中的键

时间:2016-07-31 13:24:21

标签: node.js mongodb mongoose

我的文件如下:

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....]

无论如何我可以摆脱文件中没有的这些键吗? 我在this video知道这个mapreduce答案,但我不知道如何将其翻译成猫鼬。 AFAIK mongoose不支持runCommand。

3 个答案:

答案 0 :(得分:4)

您必须使用_doc属性,因为它包含您的实际文档。此外,您只需使用Object.keys即可获取属性列表。

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

答案 1 :(得分:0)

不确定您是否仍然需要它,但我设法使用以下代码在Nestjs和Mongoose中完成它:

    async leadModel(): Promise<any> {
    const keys = this.leadsModel.findOne();
    return Object.keys(keys.schema.obj)
}

它仍然不是它的最佳版本,并且还向我警告该属性在我的类型上不存在,但可以正常使用。仅返回集合的键。如果删除Object.keys(),它也会返回嵌套键。

答案 2 :(得分:0)

添加到@str 答案,不要忘记添加错误作为第一个回调参数

Bar

您可能还想从密钥对象中删除“_id”和“__v”