如何在 $match 中使用 $ne 以及 mongodb 中的 $lookup

How to use $ne in a $match along with $lookup in mongodb

我有3个合集如下:

  1. 医生。
  2. 专业详情
  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']}
       }
  }

仍然欢迎任何改进或建议!