Javascript mongoDB:聚合动态/多个字段
我需要将包含嵌套文档的集合转换为包含父引用的模型树结构。我的结构是这样的:Javascript mongoDB:聚合动态/多个字段,javascript,mongodb,Javascript,Mongodb,我需要将包含嵌套文档的集合转换为包含父引用的模型树结构。我的结构是这样的: { "_id" : "sdaGREsfRdfGdFdwG", "docTitle" : "Document 1", "group" : [ { "id" : "cdPhkTpMXi8z6TqMT" "title" : "title 1", "data" : [ {
{
"_id" : "sdaGREsfRdfGdFdwG",
"docTitle" : "Document 1",
"group" : [
{
"id" : "cdPhkTpMXi8z6TqMT"
"title" : "title 1",
"data" : [
{
"id" : "Nkspf5kKfPo3axeJA",
"some" : "data",
"other" : "things",
"and" : "so on",
},
{
"id" : "vyjgkuNXRN9KkCd5o",
"some" : "data",
"any" : "thing",
}
],
},
{
"id" : "TuibXPe5qMvqdMW6q"
"title" : "title 2",
"data" : [
{
"id" : "f5L5zsSNRSQKWoAXL",
"some" : "data",
},
{
"id" : "Ca8ncFgq83RoeD8he",
"some" : "data",
"other" : "things",
},
],
}
]
}
要获取数据元素(它们是组元素的子元素),我执行以下操作:
db.myCol.aggregate([{$unwind:"$group"},
{$unwind:"$group.data"},
{$project:{_id:"$group.data.id", some:"$group.data.some",
parent:"$group.id", type:{$literal:"element"}}}])
我的问题是当每个元素的结构不同时,获取数据对象的所有字段。由于内容是动态的,因此有不同的字段或不同数量的字段。在上面的代码中,我使用了显式的字段,但这并没有真正的帮助。我想使用完整的内容并添加字段type
和parent
结果
根据您的问题,您提到您不知道数据
元素的结构,因此要在数组更改输出结构时保留数据
。在这里,我发布了答案,但它并不完全符合您的预期输出,而是解决了在聚合中使用数据
数组动态字段的问题
db.myCol.aggregate({
"$project": {
"results": {
"$map": {
"input": "$group",
"as": "el",
"in": {
"parent": "$$el.id",
"type": {
"$literal": "element"
},
"data": "$$el.data"
}
}
}
}
}, {
"$unwind": "$results"
}, {
"$group": {
"_id": null,
"results": {
"$push": "$results"
}
}
}).pretty()
如果在group
之前再次展开,如{$wunwind:$results.data}
,则将获得所有数据
数组值
db.myCol.aggregate({
"$project": {
"results": {
"$map": {
"input": "$group",
"as": "el",
"in": {
"parent": "$$el.id",
"type": {
"$literal": "element"
},
"data": "$$el.data"
}
}
}
}
}, {
"$unwind": "$results"
}, {
"$group": {
"_id": null,
"results": {
"$push": "$results"
}
}
}).pretty()