我正在使用MongoDB数据库开发应用程序,该数据库需要检查今天特定工作日启用的项目。 可以为一周中的任何一天启用项目。 (例如:周一和周三,或周二,周四和周六,每天,无论如何)
我打算这样做:
var currentWeekDay = Math.pow(2,new Date().getDay());
因此
Sunday === 1
Monday === 2
Tuesday === 4
Wednesday === 8
...
Saturday === 64
示例项可能是这样的
{_id:'blah', weekDays:127}
现在我想查询今天启用的所有项目......
MongoDB有一个运算符$和,但这仅适用于逻辑运算。 它有$ bitsAnySet,但看起来它只在3.16中实现。 https://jira.mongodb.org/browse/SERVER-3518 我正在运行MongoDB v2.6.10。
所以我想知道如何提出合理的可索引查询。
也许
{_id:'blah', w0:1, w1:1, w2:1, w3:1, w4:1, w5:1, w6:1} //every day
{_id:'blah', w0:1, w1:0, w2:0, w3:0, w4:0, w5:0, w6:1} //Sat and Sun
这很容易索引。任何人都可以想到更简洁的方式吗?
答案 0 :(得分:2)
一种选择是将天数存储为整数数组:
{ '_id' : '1' , 'weekDays' : [0,1,2,3,4] } // mon-fri
{ '_id' : '2' , 'weekDays' : [5,6] } // sat-sun
然后你可以在weekDays字段上创建一个简单的索引:
db.collection.createIndex({ weekDays : 1 })
查询也很简单:
db.collection.find({weekDays : 2}) // wed