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': ['數學一班', '音樂一班']]}]
#=================================================================================================================================================

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM