如果当前日期介于MongoDB中对象的startDate数组和endDate数组中的任何可用日期之间,如何排除mongo文档

wgx48brx  于 2023-03-22  发布在  Go
关注(0)|答案(1)|浏览(142)

我有一个类似这样的模式,其中我以对象数组的形式获得了startDate和endDate数组。请在下面找到截图。

现在我需要检查当前日期是否在任何可用日期范围之间。
这就是我一直在尝试的

db.products.aggregate([
  {
    "$match": {
      "$and": [
        {
          "isDeleted": false
        },
        {
          "isArchived": false
        },
        {
            _id: ObjectId("63de4823561e0319a5745537")
        },
        {
            bookings: { 
                '$elemMatch': { 
                    $nin:[
                        {productBookingCompleteDate: { '$gt': new Date("2023-04-03T04:03:49.642Z") }}, 
                        {productBookingStartDate: { '$lt': new Date("2023-04-03T04:03:49.642Z") }}    
                    ]
                }
            }
        }
      ]
    }
  },
...... // Rest of the logics
])

但如果当前日期在这些范围内,则返回数据,但我想要相反的情况。只有当当前日期不在任何日期范围内时,它才应该返回文档。
谁能帮我一下。
谢谢。

qjp7pelc

qjp7pelc1#

如果当前日期介于startDate和endDate对象数组中的任意日期之间,要排除MongoDB文档,可以使用$elemMatch操作符检查是否存在包含当前日期的预订范围,然后使用$not操作符否定匹配,只返回当前日期不在任何预订范围内的文档。

db.products.find({
  _id: ObjectId("63de4823561e0319a5745537"),
  isDeleted: false,
  isArchived: false,
  bookings: {
    $not: {
      $elemMatch: {
        productBookingStartDate: { $lte: new Date() },
        productBookingCompleteDate: { $gte: new Date() }
      }
    }
  }
})

相关问题