mongodb';s聚合查找管道条件集合
当我写查询时,我必须检索所有学校的男生的详细信息,该查询同时检索男生和女生mongodb';s聚合查找管道条件集合,mongodb,Mongodb,当我写查询时,我必须检索所有学校的男生的详细信息,该查询同时检索男生和女生 let result = await schoolModel.aggregate([ { $match: { isdeleted: false } }, { $lookup: { localField: "_id", from: "students", foreignField: "schl_id", as: "studentsList" },
let result = await schoolModel.aggregate([
{ $match: { isdeleted: false } },
{ $lookup: {
localField: "_id", from: "students", foreignField: "schl_id", as: "studentsList" },
{ $project: { "studentsList.isdeleted": 1, "studentsList.gender": 1, "studentsList._id": 1 } },
{ $match: { "studentsList.isdeleted": false, "studentsList.gender": "Male" } }
]);
在上面的查询中,它没有检查匹配条件,即..,studentsList.isdeleted&gender有人能帮我找出上面查询的错误吗$lookup返回一个数组,这意味着当您使用匹配查询时,如果数组包含与您的条件匹配的文档,它将返回true 要检索您想要的结果,您有两种选择:
studentList
匹配每个文档,然后分组以重新构造结果let result = await schoolModel.aggregate([
{
$match: {
isdeleted: false
}
},
{
$lookup:
{
from: "students",
let: {school_id: "$_id"},
pipeline: [
{
$match:
{
$expr:
{
$and:
[
{$eq: ["$schl_id", "$$school_id"]},
{$eq: ["$gender", "Male"]},
{$eq: ["$isdeleted", false]}
]
}
}
}
],
as: "studentList"
}
},
{
$match: {
"studentList.0": {$exists: true}
}
}
]);