我正在努力解决与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
}
在某个时候,我需要能够以一定的时间间隔对所有停车信息进行分组,这样我就可以计算出一定时间内停车的汽车数量,例如。
使用上面的信息,我需要看到对于这个特定条目,这辆车在我的停车场之间:
这样,就有可能计算出之间的停放汽车数量:
我的问题是:这是存储信息的最佳方法吗?有没有更好的办法?如何使这种时间间隔查询适合我的情况?
答案 0 :(得分:0)
...能够计算出一定时间内我的汽车数量 停车...
查询基于start
和end
日期时间;这是时间段。
然后,通过以下方式获得汽车:
check-in
和check-out
和start
end
和check-in
之后的start
check-out
在end
之内而check-in
在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 } } ] }
] }
的{{1}}和in
的{{1}}用了。
查询参数,时间段,例如:
checkin_date
这些时间是2019年12月25日上午9点至下午5点之间的时间。
以下查询将返回指定时间段内的汽车数量:
out
使用以下checkout_date
个条目的测试数据,您将获得var start = "2019-12-25T09:00:00.000+00:00"
var end = "2019-12-25T17:00:00.000+00:00"
辆汽车的数量;条目db.parking.find( predicate ).count()
将被排除。
11
我的问题是:这是存储信息的最佳方法吗?有没有更好的 办法?如何使这种时间间隔查询适合我的情况?
您存储数据的方式(原样)看起来不错。理想情况下,10
和_id: 6
应该是MongoDB Date字段类型。
上面的示例显示了时间间隔查询。