mongoDB实战聚合管道--$unwind

Posted 陈晓婵

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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的值不同外,其他的值都是相同的.



以上是关于mongoDB实战聚合管道--$unwind的主要内容,如果未能解决你的问题,请参考以下文章

spring mongodb - 聚合管道到java

在 MongoDB 的聚合管道中获取 $group 之后的输入文档中的字段

在 MongoDB 的聚合管道中获取 $group 之后的输入文档中的字段

Mongodb不等于0不使用聚合

mongodb aggregate

MongoDB Aggregation - $unwind order 文档是不是与嵌套数组 order 相同