Node.js mongoose中$lookup后如何过滤多个属性
我正在尝试获取学生的电子邮件,该学生在一门课程下提交了所有作业。首先,我要检查他们是否购买了课程。我需要过滤掉Node.js mongoose中$lookup后如何过滤多个属性,node.js,mongodb,mongoose,mongodb-query,Node.js,Mongodb,Mongoose,Mongodb Query,我正在尝试获取学生的电子邮件,该学生在一门课程下提交了所有作业。首先,我要检查他们是否购买了课程。我需要过滤掉课程和isSubmittedtrue或false。如果我使用$和操作,我得到的是空数组 cond: { $and : { $eq: ["$$assignmentObj.courseId", ObjectId(id)], $eq: ["$$assignmentObj.isSubmitted", true],
课程
和isSubmitted
true或false。如果我使用$和
操作,我得到的是空数组
cond: {
$and : {
$eq: ["$$assignmentObj.courseId", ObjectId(id)],
$eq: ["$$assignmentObj.isSubmitted", true],
}
}
但是,如果我尝试按此条件进行筛选,我将获得数据,但未执行isSubmitted
true或false筛选-
cond: {
$eq: ["$$assignmentObj.courseId", ObjectId(id)],
}
我已经把这个写在控制器上了-
const assignmentCount = await Assignment.find({ courseId: id }).countDocuments();
const assignmentSubmittedUser = await PurchaseHistory.aggregate([
{
$project: {
userId: {
$toObjectId: "$userId"
},
courseId: {
$toObjectId: "$courseId"
},
}
},
{ $match: { courseId: ObjectId(id) } },
{
$lookup: {
from: 'assignmenthistories',
localField: 'userId',
foreignField: 'user',
as: 'assignmentList'
}
},
{
$project:
{
userId: 1,
assignmentList:
{
$filter:
{
input: "$assignmentList",
as: "assignmentObj",
cond: {
$and : {
$eq: ["$$assignmentObj.courseId", ObjectId(id)],
$eq: ["$$assignmentObj.isSubmitted", true],
}
}
}
}
}
},
{
$lookup: {
from: 'users',
localField: 'userId',
foreignField: '_id',
as: 'userDetail'
}
},
{
$project: {
'email': { $arrayElemAt: ["$userDetail.email", 0] },
assignmentCount: { $size: '$assignmentList' }
}
},
{ $match: { assignmentCount } },
])
$和
条件应该在如下数组中{$and:[{$eq:[“$$assignmentObj.courseId”,ObjectId(id)]},{$eq:[“$$assignmentObj.isSubmitted”,true]}