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

在键值对情况下,Mongodb在一个键上是不同的,mongodb,Mongodb,我在mongodb中有下面的文档结构,我想从列customData 如果你看下面,我希望我的结果是:key1,key2,key3,key4 做 db.coll.distinct("customData") 将带来值,而不是键 { "_id":ObjectId("56c4da4f681ec51d32a4053d"), "accountUnique":7356464, "customData":{ "key1":1, "key2":2, } } {

我在mongodb中有下面的文档结构,我想从列
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,
   }
}

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

运行以下mapreduce操作将使用所有键作为
\u 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"]