我有3个收藏集,如下所示:
- 医生。
- professionalDetails
- 约会
我希望所有不包括在约会集合中的医生可用约会。 我尝试了以下查询,并从几个小时开始研究它:
const appointments = await Doctor.aggregate([
{$match: {role: 'DOCTOR',_id: ObjectId(doctorId)}},{
$lookup: {
from: 'professionalDetails',localField: '_id',foreignField: 'doctorId',as: 'professionalDetails'
}
},{
$lookup: {
from: 'appointments',as: 'appointments'
}
},{$unwind: "$professionalDetails"},{$unwind: "$professionalDetails.schedule"},{$match: {'professionalDetails.schedule.day': 'Tuesday'}},{$unwind: "$professionalDetails.schedule.timmings"},{$unwind: "$appointments"},{$match: {'professionalDetails.schedule.timmings._id': {$ne: 'appointments.slotId'}}},{
$project: {
_id: 0,time: '$professionalDetails.schedule.timmings.slot',_id: '$professionalDetails.schedule.timmings._id'
}
}
]);
以上内容仍返回所有插槽。 但是,如果我按如下所示对不相等的匹配进行硬编码,则它会起作用:
{$match: {'professionalDetails.schedule.timmings._id': {$ne: ObjectId('5dd2a9cab4a4a32c9359ac1f')}}}
在猫鼬模型中,这两个id都是对象ID,而不是字符串。
我很陌生。指导真的很感激!
请帮助! 预先感谢!