【发布时间】:2020-03-15 03:15:29
【问题描述】:
我有3个收藏如下:
- 医生。
- 专业详情
- 约会
我想获取不在预约集合中的所有可用医生预约。 我已经尝试了以下查询并一直在处理它几个小时:
const appointments = await Doctor.aggregate([
{$match: {role: 'DOCTOR', _id: ObjectId(doctorId)}},
{
$lookup: {
from: 'professionalDetails',
localField: '_id',
foreignField: 'doctorId',
as: 'professionalDetails'
}
},
{
$lookup: {
from: 'appointments',
localField: '_id',
foreignField: 'doctorId',
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,而不是字符串。
我对它很陌生。非常感谢指导!
请帮忙! 提前致谢!
【问题讨论】:
-
你所要做的就是写
'$appointments.slotId'而不是'appointments.slotId'所以mongo使用约会slotid的值而不是字符串值。 -
也试过了。没有成功。
-
请发布三个集合的一些示例数据。
-
您是指三个集合的原始文档?
标签: mongodb mongoose mongodb-query mongoose-schema