zoukankan      html  css  js  c++  java
  • mongo之$group+$addToSet

    直接举例说明

    #ArrangingResult表结构
    {
        "_id" : ObjectId("5acc739df78bf21f8c94f080"),
        "SS_Arranging_Mid" : "5a058cb8705deb4617cde59d",
        "Lessons_Status" : 1,
        "Lessons" : 9,
        "schedule" : [ 
            {
                "classname" : "英语3班",
                "publicclass" : [ 
                    "3班"
                ],
                "subject" : "英语",
                "teacher" : "5a055c01105deb3b2fd3bb1e",
                "studentlist" : [ 
                    "5a055c20335deb3b32d3bbe5", 
                    "5a055c20705de33b32d3bbe6", 
                    "5a055c20705de66b32d3bbeb", 
                    "5a055c20705de44b32d3bbec", 
                ],
            }, 
            {
                "classname" : "语文4班",
                "publicclass" : [ 
                    "4班"
                ],
                "subject" : "语文",
                "teacher" : "5a055c0b722deb3b2fd3bb16",
                "studentlist" : [ 
                    "5a055c207077eb3b32d3bbe2", 
                    "5a055c207066eb3b32d3bbe8", 
                    "5a055c20766deb3b32d3bbe9", 
                    "5a055c20705deb3832d3bbea", 
                ],
            }, 
    ......

    查询

    pipeline = [
        {
            "$unwind": "$schedule",
        },
        {"$match":
            {
                "SS_Arranging_Mid": arrangeMid,
                "Lessons": {"$in": self.lessonsOfQueryDay},
                "schedule.studentlist": stuMid,
            }
        },
        {"$project":
            {
                "_id": 0,
                "Lessons": 1,
                "teacher": "$schedule.teacher",
                "subject": "$schedule.subject",
                "classname": "$schedule.classname",
            }
        },
        
    #==========================================================================    
        {"$group": {"_id": "$Lessons",
                    "schedule": {"$addToSet": {"teacher": "$teacher",
                                               "subject": "$subject",
                                               "Lessons": "$Lessons",
                                               "classname": "$classname",
                                              }}}},
                                               
                                               
    #================================================================================                                           
        {"$sort": {"_id": 1}}
    ]
    arrangeResults = await ArrangingResult.aggregate(pipeline)
    #输出
    arrangeResults= [
    
    {'_id': 25, 'schedule': [{'teacher': '5bdfdd577055eb191fcfe21c', 'subject': '语文', 'Lessons': 25, 'classname': '语文一班'}]},_
    
    _ {'_id': 26, 'schedule': [{'teacher': '5bd5557705deb191fcfe21c', 'subject': '语文', 'Lessons': 26, 'classname': '语文一班'}]}, _
    
    _{'_id': 27, 'schedule': [{'teacher': '5bd6bead755deb201206acaf', 'subject': '化学', 'Lessons': 27, 'classname': '化学一班'}]},
    #===============================================================================================================================
    #此处分组规则设置是让'Lessons': 28的记录分到一组,并且每条的数据都在各自的字典里
     {'_id': 28, 'schedule': 
    [
    {'teacher': '5bd6bead555deb201206acb5', 'subject': '音乐', 'Lessons': 28, 'classname': '音乐一班'}, _
    
    _{'teacher': '5bdfdd7f5555deb191dcfe247', 'subject': '数学', 'Lessons': 28, 'classname': '数学一班'}_
    
    _]},_
    
    
    #==================================================================================================================================
    
    _ {'_id': 29, 'schedule': [{'teacher': '5bdfdd7f885deb191dcfe247', 'subject': '数学', 'Lessons': 29, 'classname': '数学一班'}]}, _

    如果查询语句换成这种

    pipeline = [
                {
                    "$unwind": "$schedule",
                },
                {"$match":
                    {
                        "SS_Arranging_Mid": arrangeMid,
                        "Lessons": {"$in": self.lessonsOfQueryDay},
                        "schedule.studentlist": stuMid,
                    }
                },
    #$addToSet放在每个单独字段的值里,这样会导致每条数据结果不对应,也就是不能分清那些数据是属于一条的。========================================================
                {"$group":
                    {
                        "_id": "$Lessons",
                        "teacher": {"$addToSet": "$schedule.teacher"},
                        "subject": {"$addToSet": "$schedule.subject"},
                        "classname": {"$addToSet": "$schedule.classname"},
                       
                    }
                },
    #=============================================================================================================================================
                {"$sort": {"_id": 1}}
            ]
    
    
    #结果
    _{'_id': 27, 'teacher': ['5bd6bead70511b201206acaf'], 'subject': ['化学'], 'classname': ['化学一班'],}, 
    #==========================================================================================================================================
    
    {'_id': 28, 'teacher': ['5bdfdd7f705de1191dcfe247', '5bd6bead705deb201206acb5'], 'subject': ['数学', '音乐'], 'classname': ['数学一班', '音乐一班']]}]
    #=================================================================================================================================================
  • 相关阅读:
    delphi 时间格式操作
    Sleep函数的真正用意
    delphi公共函数 UMyPubFuncFroc--版权所有 (C) 2008 勇者工作室
    delphi override、overload、reintroduce的区别-0613.txt
    8、显示程序占用内存多少.txt
    可逆加密解密单元文件和调用方法
    Delphi7 客户端调用WebService(天气预报)
    操作TAB文件和TStringGrid赋值;
    3、利用SuperObject 循环处理Json深层次的值
    4、delphi record数组复制
  • 原文地址:https://www.cnblogs.com/zzy-9318/p/10022651.html
Copyright © 2011-2022 走看看