Gui*_*ira 5 javascript mongodb mongodb-query aggregation-framework
我需要从我的集合中获取所有字段名称,包括子文档中的字段.我目前正在运行此命令并仅获取根字段的名称.我如何获得所有字段名称?
我的收藏看起来像这样:
"UserId" : 11111,
"Personal" : {
"Email" : "email@gmail.com",
"FirstName" : "Name",
"LastName" : "Last"
},
"Car" : {
"CarType" : "NULL"
}
Run Code Online (Sandbox Code Playgroud)
这是命令
var mr = db.runCommand({
"mapreduce" : "myCollection",
"map" : function() {
for (var key in this) { emit(key, null); }
},
"reduce" : function(key, stuff) { return null; },
"out": "myCollection" + "_keys"
})
db[mr.result].distinct("_id")
Run Code Online (Sandbox Code Playgroud)
我想要这个结果:
UserId,Personal.Email,Personal.FirstName,Personal.LastName,Car.CarType
您可以使用下面aggregation
db.collection.aggregate([
{ "$project": { "data": { "$objectToArray": "$$ROOT" }}},
{ "$project": {
"data": {
"$map": {
"input": "$data",
"in": {
"$cond": [
{ "$eq": [{ "$type": "$$this.v" }, "object"] },
{ "k": "$$this.k", "v": { "$objectToArray": "$$this.v" }},
"$$this"
]
}
}
}
}},
{ "$project": {
"data": {
"$map": {
"input": "$data",
"as": "d",
"in": {
"k": "$$d.k",
"v": {
"$map": {
"input": { "$cond": [{ "$eq": [{ "$type": "$$d.v" }, "array"] }, "$$d.v", []] },
"as": "v",
"in": { "v": { "$concat": ["$$d.k", ".", "$$v.k"] }}
}
}
}
}
}
}},
{ "$project": {
"finalKeys": {
"$concatArrays": [
{ "$reduce": {
"input": "$data.v",
"initialValue": [],
"in": { "$concatArrays": ["$$value", "$$this.v"] }
}},
"$data.k"
]
}
}}
])
Run Code Online (Sandbox Code Playgroud)
输出
[
{
"finalKeys": [
"Personal.Email",
"Personal.FirstName",
"Personal.LastName",
"Car.CarType",
"_id",
"UserId",
"Personal",
"Car"
]
}
]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
85 次 |
最近记录: |