mongodb聚合逐层拆分数组元素
- mongodb中的聚合操作aggregate可以实现很多对数据库文档的复杂操作,而拆分数据库中的数组类型字段元素就是功能之一,$unwind操作可以实现对文档中数组字段的拆分。
- 对某字段进行拆分语法
db.test.aggregate([{$unwind:'$字段名称'}])
例如数据
{"id" : "XXXXXX",
"array" : [
{item:"a",size:[{title:"a",no:1},{title:"a",no:2}]},
{item:"b",size:[{title:"b",no:1},{title:"b",no:2}]},
{item:"c",size:[{title:"c",no:1},{title:"c",no:2}]}
]
}
- 第一次拆分
db.test.aggregate([{$unwind:'$array'}])
得到数据:
{
"id" : "XXXXXX",
arrray:{item:"a",size:[{title:"a",no:1},{title:"a",no:2}]}
},
{
"id" : "XXXXXX",
arrray: {item:"b",size:[{title:"b",no:1},{title:"b",no:2}]},
},
{
"id" : "XXXXXX",
arrray: {item:"c",size:[{title:"c",no:1},{title:"c",no:2}]},
}
*第二层拆分
db.test.aggregate([{$unwind:'$array'},{$unwind:"$array.size"}])
得到数据:
{
"id" : "XXXXXX",
arrray:{item:"a",size:{title:"a",no:1}}
},
{
"id" : "XXXXXX",
arrray:{item:"a",size:{title:"a",no:2}}
},
{
"id" : "XXXXXX",
arrray:{item:"b",size:{title:"b",no:1}}
},
{
"id" : "XXXXXX",
arrray:{item:"a",size:{title:"b",no:2}}
},
{
"id" : "XXXXXX",
arrray:{item:"c",size:{title:"c",no:1}}
},
{
"id" : "XXXXXX",
arrray:{item:"c",size:{title:"c",no:2}}
},