Javascript 获取mongo db中日期大于现在的文档中数组中的所有元素
我有一个名为FilmSessions的集合,每个FilmSession文档都有一个名为seats的属性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
{
'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分钟,并检查条件
date是否小于输入日期reservedAt
let reservedAt = new Date();
reservedAt.setMinutes(reservedAt.getMinutes() - 15);
db.collection.find({
"seats.reservedAt": {
$lt: reservedAt
}
})