首页 > 解决方案 > 用mongodb中的对象数组检查字符串值数组

问题描述

我有这样的字符串数组

let fromHour = ['2.5','3','3.5']
let toHour = ['2.5','3','3.5']

我有一个保存在 mongoDB 中的对象数组

timeRange = [
              {
                from:'2.5',
                to:'3'
              },
              {
                from:'3',
                to:'3.5'
               }

           ]

我想检查该对象值中是否存在我的任何字符串值数组

我已经尝试过了,但它给了我这个错误(无法识别的表达式'$match')

checkAppoint = await Appointment.aggregate([
                {
                  $project: {
                    date: myScheduleFinal[k].date,
                    status: { $in: ['pending', 'on-going'] },
                    timeRange: {
                      '$match': {
                        'from': { $in: fromHolder },
                        'to': { $in: toHolder },
                      },
                    },
                  },
                },
              ]);

我也尝试过这个解决方案,它对我有用,但需要很长时间,所以我正在尝试使用聚合

 checkAppoint = await Appointment.findOne({
                date: myScheduleFinal[k].date,
                status: { $in: ['pending', 'on-going'] },
                timeRange:{$elemMatch:{
                  from:{$in:fromHolder},
                  to:{$in:toHolder}
                }}
              });

所以任何人都有解决方案

标签: node.jsmongodbaggregation-framework

解决方案


只需尝试$elemMatch$in运营商,

  • 使用find()方法
checkAppoint = await Appointment.find({
  timeRange: {
    $elemMatch: {
      from: { $in: fromHour },
      to: { $in: toHour }
    }
  }
})

操场


  • 使用aggregate()方法
checkAppoint = await Appointment.aggregate([
  {
    $match: {
      timeRange: {
        $elemMatch: {
          from: { $in: fromHour },
          to: { $in: toHour }
        }
      }
    }
  }
])

操场


推荐阅读