我如何获得Mongodb系列中的所有键?

我看到很少的解决方案,但那些并不是我的解决方案 . 我有一个名称结果的数据库,集合名称是如下标记:

db.marks.find();
{ "_id" : ObjectId("54f57522627af4bfdcf79764"), "name" : "John", "scroe1" : 23, "score2" : 21, "score5" : 12 }
{ "_id" : ObjectId("54f5761a627af4bfdcf79765"), "name" : "Mike", "scroe2" : 22, "score3" : 20, "score4" : 22 }
{ "_id" : ObjectId("559d0bc521cb2e056507c3e3"), "name" : "Bush", "score2" : 30 }

我试过了

var doc=db.marks.findOne(); for (var key in doc) print(key);

我得到了

_id
name
score1
score2
score5

但是我希望收集所有关键字如下:

_id, name, score1, score2, score3, score4, score5

名称scroe1得分2得分3

回答(2)

2 years ago

findOne只返回第一个找到的文件 . 由于您列出的第一个文档没有score3和score4键,因此不会显示它们 . 如果要在所有文档中显示所有根级别键,则需要遍历db中的所有文档 .

var keys = [];
db.marks.find().forEach(function(doc){
    for (var key in doc){ 
        if(keys.indexOf(key) < 0){
           keys.push(key);
        }
    }
});

print(keys);

2 years ago

Mongodb find() 命令有两个参数,第一个是查询,第二个是投影 .

db.collection.find(query,projection) 之类的东西 .

如果文档是 db.myCol.find(); ,则返回:

{
  {
    _id:1
    name: ''hello',
    age: 23
  }, {
    _id:2
    name: ''bollo',
    age: 27
  }
}

并且 db.myCol.find({},{_id:1}); 返回:

1
2