【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
}


使用$unwind可以将weekday中的每个数据都被分解成一个文档,并且除了weekday的值不同外,其他的值都是相同的.


实例讲解:

{
    "_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的值不同外,其他的值都是相同的.



posted @ 2017-06-27 11:48  陈晓婵  阅读(2847)  评论(0编辑  收藏  举报