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



  • 相关阅读:
    mysql 7.5.8 服务无法启动 服务没有报告任何错误
    Ubuntu 16.04 php卸载
    函数式编程(3)-匿名函数
    函数式编程(2)-返回函数
    函数式编程(1)-高阶变成(3)-sorted
    函数式编程(1)-高阶变成(2)-filter
    函数式编程(1)-高阶变成(1)-map/reduce
    高级特性(4)-生成器
    高级特性(3)-列表生成式
    高级特性(2)-迭代
  • 原文地址:https://www.cnblogs.com/chenxiaochan/p/7253382.html
Copyright © 2020-2023  润新知