我在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,
}
}
答案 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"]