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)
最新推荐文章于 2024-07-24 01:44:55 发布