我正在努力处理一些与MongoDB相关的查询(或建模)。我将从SQL数据库迁移到MongoDB。到目前为止还不错,但有一个棘手的问题,我找不到一个好的解决方案。
我现在的停车场收银台上有以下结构。
{
_id: 5e00f403a663466329c78c5a,
checkin_date: "2018-01-02T08:43:20.000+00:00",
checkout_date: "2018-01-02T11:07:16.000+00:00",
fare_amount: 10,
license_num: blabla
}
在某个时候,我需要能够分组所有的停车信息在一个时间间隔的方式,所以我将能够计数在一定时期的汽车在我的停车场,例如。
使用上面的信息,我需要看到,对于这个特定的条目,这辆车停在我的停车位之间:
有了这一点,就可以计算出下列车辆之间的停放车辆数目:
我的问题是:这是存储信息的最好方式吗?有更好的办法吗?对于我的情况,如何使这个时间间隔查询成为可能?
发布于 2019-12-26 04:34:40
..。能在一定时间内数出我停车的车数,.
查询基于start
和end
日期-时间;这是一段时间。
然后,用:
check-in
和check-out
在start
和end
中check-in
在start
之前,check-out
在end
之后check-in
在start/end
内,check-out
在start/end
之外check-in
在外面,check-out
在start/end
里所有这些的总和给出了在这段时间内停车的车辆总数。
查询谓词将如下所示:
var predicate = { $or: [
{ $and: [ { in: { $gte: start } }, { out: { $lte: end } } ] },
{ $and: [ { in: { $lt: start } }, { out: { $gt: end } } ] },
{ $and: [ { in: { $gte: start } }, { in: { $lte: end } }, { out: { $gt: end } } ] },
{ $and: [ { in: { $lt: start } }, { out: { $gte: start } }, { out: { $lte: end } } ] }
] }
注意:为了简洁起见,我将in
用于checkin_date
,out
用于checkout_date
。
查询参数、时间段,例如:
var start = "2019-12-25T09:00:00.000+00:00"
var end = "2019-12-25T17:00:00.000+00:00"
这是2019年12月25日上午9点到下午5点之间的时间。
以下查询将返回指定时间段内的汽车数量:
db.parking.find( predicate ).count()
使用以下11
条目的测试数据,您将得到10
cars的计数;条目_id: 6
将被排除在外。
{ "_id" : 1, "veh" : "car-1", "in" : "2019-12-25T08:00:00.000+00:00", "out" : "2019-12-25T10:00:00.000+00:00" }
{ "_id" : 2, "veh" : "car-3", "in" : "2019-12-25T13:00:00.000+00:00", "out" : "2019-12-25T14:00:00.000+00:00" }
{ "_id" : 3, "veh" : "car-4", "in" : "2019-12-25T13:00:00.000+00:00", "out" : "2019-12-25T15:00:00.000+00:00" }
{ "_id" : 4, "veh" : "car-5", "in" : "2019-12-25T14:00:00.000+00:00", "out" : "2019-12-25T16:00:00.000+00:00" }
{ "_id" : 5, "veh" : "car-4", "in" : "2019-12-25T14:00:00.000+00:00", "out" : "2019-12-25T18:00:00.000+00:00" }
{ "_id" : 6, "veh" : "car-0", "in" : "2019-12-25T06:00:00.000+00:00", "out" : "2019-12-25T08:00:00.000+00:00" }
{ "_id" : 7, "veh" : "car-1", "in" : "2019-12-25T17:00:00.000+00:00", "out" : "2019-12-25T18:00:00.000+00:00" }
{ "_id" : 8, "veh" : "car-9", "in" : "2019-12-25T12:00:00.000+00:00", "out" : "2019-12-25T12:00:00.000+00:00" }
{ "_id" : 9, "veh" : "car-x", "in" : "2019-12-25T17:00:00.000+00:00", "out" : "2019-12-26T01:00:00.000+00:00" }
{ "_id" : 10, "veh" : "car-y", "in" : "2019-12-24T12:00:00.000+00:00", "out" : "2019-12-25T12:00:00.000+00:00" }
{ "_id" : 11, "veh" : "car-z", "in" : "2019-12-25T08:00:00.000+00:00", "out" : "2019-12-25T22:00:00.000+00:00"}
我的问题是:这是存储信息的最好方式吗?有更好的办法吗?对于我的情况,如何使这个时间间隔查询成为可能?
存储数据的方式(按原样)看起来很好。理想情况下,checkin_date
和checkout_date
应该是MongoDB日期字段类型。
上面的示例显示了时间间隔查询。
https://stackoverflow.com/questions/59469702
复制相似问题