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

时间:2015-07-08 11:57:33

标签: mongoose mangodb

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

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 score2 score3here

3 个答案:

答案 0 :(得分:2)

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

expect(_.combinations([1, 2], 1, false)).to.be.equal([[1],[2]])
expect(_.combinations([1, 2], 1, true)).to.be.equal([[1],[2]])
expect(_.combinations([1, 2, 3], 2, false)).to.be.equal([[1,2],[1,3],[2,3]])
expect(_.combinations([1, 2, 3], 2, true)).to.be.equal([[1,2],[1,3],[2,3],[2,1],[3,1],[3,2]])
expect(_.combinations([1, 2, 3, 4], 3, false)).to.be.equal([[1,2,3],[1,2,4],[1,3,4],[2,1,4],[2,3,4],[3,4,1]])
expect(_.combinations([1, 2, 3, 4], 3, true)).to.be.equal([[1,2,3],[1,2,4],[1,3,4],[2,1,4],[2,3,1],[2,3,4],[3,1,2],[3,4,1],[3,4,2],[4,1,2],[4,1,3],[4,2,3]])

答案 1 :(得分:0)

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

答案 2 :(得分:0)

mr = db.runCommand({
  "mapreduce" : "my_collection",
  "map" : function() {
    for (var key in this) { emit(key, null); }
  },
  "reduce" : function(key, stuff) { return null; }, 
  "out": "my_collection" + "_keys"
})

然后对结果集合进行不同的查找,以便找到所有键:

db[mr.result].distinct("_id")
["foo", "bar", "baz", "_id", ...]