我的文件如下:
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。
答案 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”