【问题标题】:mongodb indexable $and query possible?mongodb可索引$和查询可能吗?
【发布时间】:2015-10-24 17:52:00
【问题描述】:

我正在使用 MongoDB 数据库开发一个应用程序,该数据库需要检查为今天的特定工作日启用的项目。 可以为一周中的任何一天启用项目。 (例如:周一和周三,或者周二和周四和周六,每天,等等)

我打算这样做: var currentWeekDay = Math.pow(2,new Date().getDay());

因此

Sunday === 1
Monday === 2
Tuesday === 4
Wednesday === 8
...
Saturday === 64

示例项目可能是这样的 {_id:'blah', weekDays:127}

现在我要查询今天启用的所有项目...

MongoDB 有一个运算符 $and,但这仅用于逻辑操作。 它有 $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

这很容易被索引。谁能想到更简洁的方法?

【问题讨论】:

  • 是的,这是可能的。明智吗?不。请参阅@sheliak 的答案

标签: mongodb


【解决方案1】:

一种选择是将天存储为整数数组:

{ '_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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多