【问题标题】:How to use $ne in a $match along with $lookup in mongodb如何在 $match 中使用 $ne 以及在 mongodb 中使用 $lookup
【发布时间】:2020-03-15 03:15:29
【问题描述】:

我有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'
              }
            }
          ]);

以上仍然返回所有插槽。 但是,如果我按如下方式对不相等匹配进行硬编码,则它可以工作:

{$match: {'professionalDetails.schedule.timmings._id': {$ne: ObjectId('5dd2a9cab4a4a32c9359ac1f')}}}

另外,这两个 id 都是猫鼬模型中的对象 ID,而不是字符串。

我对它很陌生。非常感谢指导!

请帮忙! 提前致谢!

【问题讨论】:

  • 你所要做的就是写'$appointments.slotId'而不是'appointments.slotId'所以mongo使用约会slotid的值而不是字符串值。
  • 也试过了。没有成功。
  • 请发布三个集合的一些示例数据。
  • 您是指三个集合的原始文档?

标签: mongodb mongoose mongodb-query mongoose-schema


【解决方案1】:

我尝试按照 Tom 的建议添加 $appointments.slotId,但也没有成功。

尝试并环顾四周。最后,在将 match 语句替换为以下内容后,我得到了我正在寻找的输出:

 {
      $match: { 
        $expr: {$ne: ['$professionalDetails.schedule.timmings._id', '$appointments.slotId']}
       }
  }

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

【讨论】:

    猜你喜欢
    • 2016-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-09
    • 2019-05-30
    • 2019-10-24
    相关资源
    最近更新 更多