Mongodb在键值对情况下的键上是不同的

时间:2016-02-18 10:49:00

标签: mongodb

我在mongodb中有bellow文档结构,我想从列customData中带来不同的键 所以,如果你看下面,我希望我的结果是:key1,key2,key3,key4

db.coll.distinct("customData")

将带来值,而不是键。

{
   "_id":ObjectId("56c4da4f681ec51d32a4053d"),
   "accountUnique":7356464,
   "customData":{
      "key1":1,
      "key2":2,
   }
}

{
   "_id":ObjectId("56c4da4f681ec51d32a4054d"),
   "accountUnique":7356464,
   "customData":{
      "key3":1,
      "key4":2,
   }
}

1 个答案:

答案 0 :(得分:2)

可以使用 Map-Reduce 执行此操作,因为您有动态子文档键,其中distinct方法不会返回结果。

运行以下mapreduce操作将使用所有键作为_id值填充单独的集合:

var myMapReduce = db.runCommand({
    "mapreduce": "coll",
    "map" : function() {
        for (var key in this.customData) { emit(key, null); }
    },
    "reduce" : function() {}, 
    "out": "coll_keys"
})

要获取所有动态键的列表,请在生成的集合上运行distinct:

db[myMapReduce.result].distinct("_id")

将为您提供示例输出

["key1", "key2", "key3", "key4"]