【mongoDB实战】聚合管道--$unwind
$unwind:将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值。
在做项目的时候碰上了这样的需求:
实例讲解:
{
"_id" : ObjectId("5951c5de567ebff0d5011fba"),
"name" : "陈晓婵",
"address" : "北京朝阳区",
"weekday" : [
1,
2,
3,
4,
5
]
}
对weekday进行拆分:
db.getCollection('chenxiaochantest').aggregate(
[
{
$unwind:"$weekday"
}
]
)
拆分结果:
/* 1 */
{
"_id" : ObjectId("5951c5de567ebff0d5011fba"),
"name" : "陈晓婵",
"address" : "北京朝阳区",
"weekday" : 1
}
/* 2 */
{
"_id" : ObjectId("5951c5de567ebff0d5011fba"),
"name" : "陈晓婵",
"address" : "北京朝阳区",
"weekday" : 2
}
/* 3 */
{
"_id" : ObjectId("5951c5de567ebff0d5011fba"),
"name" : "陈晓婵",
"address" : "北京朝阳区",
"weekday" : 3
}
/* 4 */
{
"_id" : ObjectId("5951c5de567ebff0d5011fba"),
"name" : "陈晓婵",
"address" : "北京朝阳区",
"weekday" : 4
}
/* 5 */
{
"_id" : ObjectId("5951c5de567ebff0d5011fba"),
"name" : "陈晓婵",
"address" : "北京朝阳区",
"weekday" : 5
}
实例讲解:
{
"_id" : ObjectId("5951ca15567ebff0d5011fbb"),
"name" : "陈晓婵",
"address" : "北京朝阳",
"lunch" : [
{
"food" : "baozi",
"fruit" : "taozi"
},
{
"food" : "miaotiao",
"fruit" : "xigua"
}
]
}
对lunch进行拆分:
db.getCollection('chenxiaochantest2').aggregate(
[
{
$unwind:"$lunch"
}
]
)
拆分结果:
/* 1 */
{
"_id" : ObjectId("5951ca15567ebff0d5011fbb"),
"name" : "陈晓婵",
"address" : "北京朝阳",
"lunch" : {
"food" : "baozi",
"fruit" : "taozi"
}
}
/* 2 */
{
"_id" : ObjectId("5951ca15567ebff0d5011fbb"),
"name" : "陈晓婵",
"address" : "北京朝阳",
"lunch" : {
"food" : "miaotiao",
"fruit" : "xigua"
}
}
使用$unwind可以将lunch中的每个数据都被分解成一个文档,并且除了lunch的值不同外,其他的值都是相同的.