使用mongoose進行連表查詢並分組($group),篩選($match),指定字段($project),批量查詢($in)

const arrAttribute = await models.institutionAttributes.aggregate(
                [
                    {
                        $lookup:連表關鍵詞,類似mysql中的left join 
                        {
                            from: "exhibition_institutions",//需要連接的表名
                            localField: "_id",//本表需要關聯的字段
                            foreignField: "attribute",//被連接表需要關聯的字段
                            as: "institutionsData"//查詢出的結果集別名
                        }
                    },
                    {
                        $match://條件篩選關鍵詞,類似mysql中的where
                        {
                            _id: mongoose.Types.ObjectId(team),//指定條件,在這裏我指定了id,
                        }
                    },
                    {
                        $project://指定查詢字段的關鍵詞
                        {
                            _id: 0,//由於會默認展示_id,在這裏設置爲0,不展示
                            name: 1,//展示一個字段名稱爲name的字段
                            "institutionsData._id": 1,//同上
                        }
                    },
                ]
            );
			//下面這一段可以忽略,只是對結果進行篩選
            let arrAttributeSort = [];
            for (let i = 0; i < arrAttribute.length; i++) {
                for (let j = 0; j < arrAttribute[i].institutionsData.length; j++) {
                    arrAttributeSort.push(arrAttribute[i].institutionsData[j]._id);
                }
            }
            const signData = await models.exhibitionItem.aggregate(
                [
                    {
                        $lookup:
                        {
                            from: "signups",
                            localField: "_id",
                            foreignField: "exhibition_item",
                            as: "signInstitutionsData"
                        }
                    },
                    {
                        $match:
                        {
                            "signInstitutionsData": { $ne: [] },//$ne:[]用來剔除結果集中的空數組
                            from: { $gte: parseInt(from) },,//大於等於
                            to: { $lte: parseInt(to) },//小於等於
                            "signInstitutionsData.institutions.institution": { $in: arrAttributeSort }//$in是批量查詢,[1,2,3,4,5]這種形式的數組可以直接進行查詢
                        }
                    },
                    {
                        $project:
                        {
                            _id: 0,
                            "signInstitutionsData.unit_name": 1,
                            "signInstitutionsData.institutions": 1
                        }
                    }
                ]
            );
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章