我有一些餐馆,我想查询它们是否开放。查询必须跨越日界(例如上午10:00 - 凌晨01:00)。它们的工作时间目前尚未在集合中定义,因此我可以根据此问题的答案设置架构。
但是,例如,假设我有一个这样的集合:
[
{
"name": "Pete's Bar",
"hours":
{
"Sun": {
"open": "0800",
"close": "1800"
},
"Mon": {
"open": "0800",
"close": "1800"
},
"Tue": {
"open": "0800",
"close": "1800"
},
"Wed": {
"open": "closed",
"close": "closed"
},
"Thu": {
"open": "0800",
"close": "1800"
},
"Fri": {
"open": "0800",
"close": "0100"
},
"Sat": {
"open": "0800",
"close": "0100"
}
}
}
]
根据当前时间和星期几,我如何在数据库中查询当前打开的所有餐馆?我目前只是找到所有餐馆并在python中执行逻辑。如果可能的话,我想让mongo做。再次! “小时”架构可以改变以适应答案。
答案 0 :(得分:1)
更改数据模型后(请参阅本文末尾),下面的查询将返回当前打开的所有餐馆。您可以通过添加一天的其他条目来使此查询在日期边界上工作。例如,下面我在星期日00:00到01:00之间添加了一个条目,实际上延长了星期六(08:00到24:00)的开放时间。有更优雅的方法来实现这一点,例如参见@aneroid对你的问题的评论。
var now = new Date();
var weekday =["Sun","Mon","Tue","Wed","Thu","Fri","Sat"];
var day=weekday[now.getDay()]
var hour=now.getHours()+'00'
db.openinghours.find({
hours: {
$elemMatch: {
"day": day,
"open": {
$lte: hour,
$ne: "closed"
},
"close": {
$gte: hour,
$ne: "closed"
}
我已将您的模型更改为:
[
{
"name":"Pete's Bar",
"hours":[
{
"day":"Sun",
"open":"0000",
"close":"0100"
},
{
"day":"Sun",
"open":"0800",
"close":"1800"
},
{
"day":"Mon",
"open":"0800",
"close":"1800"
},
{
"day":"Tue",
"open":"0800",
"close":"1800"
},
{
"day":"Wed",
"open":"closed",
"close":"closed"
},
{
"day":"Thu",
"open":"0800",
"close":"1800"
},
{
"day":"Fri",
"open":"0800",
"close":"1800"
},
{
"day":"Sat",
"open":"0800",
"close":"2400"
}
]
}
]