Javascript 获取mongo db中日期大于现在的文档中数组中的所有元素

Javascript 获取mongo db中日期大于现在的文档中数组中的所有元素,javascript,node.js,mongodb,mongoose,mongodb-query,Javascript,Node.js,Mongodb,Mongoose,Mongodb Query,我有一个名为FilmSessions的集合,每个FilmSession文档都有一个名为seats的属性 { 'filmName': 'string', 'seats': Seat[] } // example with data { 'filmName': 'Batman', 'seats': [ { 'state': 'available', 'seatNumber': 1 },{ 'state': 'available', 's

我有一个名为FilmSessions的集合,每个FilmSession文档都有一个名为seats的属性

{
'filmName': 'string',
'seats': Seat[]
}
 // example with data
{
'filmName': 'Batman',
'seats': [
    {
      'state': 'available',
      'seatNumber': 1
   },{
      'state': 'available',
      'seatNumber': 2
   }
 ]
}
未预订座位的示例

{
 'state': 'available',
'seatNumber': 1
}
一旦客户选择并预订了座位,客户需要付款

{
 'state': 'reserved',
 'reservedAt': DATE
 'seatNumber': 1
}
一旦顾客付了座位费,座位就转到付费座位

{
 'state': 'paid',
 'paidAt': DATE
 'seatNumber': 1
}
我想让所有的FilmSessions至少有一个座位状态设置为reserved,并且reservedAt字段存在并且已经过期(自从设置为reservedAt以来,15分钟过去了,这意味着客户没有购买座位,我们可以让它可用)

在获得至少保留一个座位的电影会议时。我想要所有的电视机,不仅仅是预定的


我正在使用mongodb,我无法更改结构来获取所有FilmSession文档,其中至少保留了一个座位,并且只能获取保留的座位,其中,
reservedAt
时间戳早于15分钟,您可以在nodejs中使用mongodb驱动程序编写以下查询:

db.collection("FilmSessions").find({
  "seats.state": "reserved",
  "seats.reservedAt": {
    $lt: new Date(Date.now() - (1000*60*15))
  }
},
{
  "filmName": 1,
  "seats": {
    "$elemMatch": {
      "reservedAt": {
          $lt: new Date(Date.now() - (1000*60*15))
      }
    }
  }
})

在这里,您可以了解这一点(上面计算的时间戳在MongoPlayGrand示例中是硬编码的,但应该可以让您了解查询的工作原理)。

  • 从当前日期删除15分钟,并检查条件
    reservedAt
    date是否小于输入日期

let reservedAt = new Date();
reservedAt.setMinutes(reservedAt.getMinutes() - 15);

db.collection.find({
  "seats.reservedAt": {
    $lt: reservedAt
  }
})