如何在 $match 中使用 $ne 以及 mongodb 中的 $lookup
How to use $ne in a $match along with $lookup in mongodb
我有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'
}
}
]);
以上仍然是returns所有的插槽。
但是,如果我按如下方式硬编码不相等的匹配项,它会起作用:
{$match: {'professionalDetails.schedule.timmings._id': {$ne: ObjectId('5dd2a9cab4a4a32c9359ac1f')}}}
此外,这两个 ID 都是猫鼬模型中的对象 ID 而不是字符串。
我对它还很陌生。非常感谢指导!
请帮忙!
提前致谢!
我尝试按照 Tom 的建议添加 $appointments.slotId,但是也没有成功。
在尝试和环顾四周之后。用以下内容替换匹配语句后,我终于得到了我正在寻找的输出:
{
$match: {
$expr: {$ne: ['$professionalDetails.schedule.timmings._id', '$appointments.slotId']}
}
}
仍然欢迎任何改进或建议!
我有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'
}
}
]);
以上仍然是returns所有的插槽。 但是,如果我按如下方式硬编码不相等的匹配项,它会起作用:
{$match: {'professionalDetails.schedule.timmings._id': {$ne: ObjectId('5dd2a9cab4a4a32c9359ac1f')}}}
此外,这两个 ID 都是猫鼬模型中的对象 ID 而不是字符串。
我对它还很陌生。非常感谢指导!
请帮忙! 提前致谢!
我尝试按照 Tom 的建议添加 $appointments.slotId,但是也没有成功。
在尝试和环顾四周之后。用以下内容替换匹配语句后,我终于得到了我正在寻找的输出:
{
$match: {
$expr: {$ne: ['$professionalDetails.schedule.timmings._id', '$appointments.slotId']}
}
}
仍然欢迎任何改进或建议!