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
}
}
]
);
使用mongoose進行連表查詢並分組($group),篩選($match),指定字段($project),批量查詢($in)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.