我的数据库中有一个请求表,它由几个字段组成,如"挂起"表示请求是否尚未得到服务,"到期"跟踪以毫秒为单位的到期时间(Epoch),"计数"在每次触发请求时递减到0。
现在,我搜索所有请求,其中要么请求已过期,要么计数已降至0,并且挂起为true。然后我会根据有效期对结果进行排序。
我确实尝试为此创建了一个索引,但根据explain()命令的结果,我确信MongoDB没有使用索引。对于这种查询的复合索引应该是什么,有什么建议吗?
用一般术语来说,查询本质上是(A OR B)AND C由C 排序
这是我通过Morphia、Java构建的查询(我是MongoDB的新手)->
query.and(query.criteria("pending").equal(true));
query.or(query.criteria("count").equal(0), query.criteria("expiry").lessThan(System.currentTimeMillis()));
query.order("expiry");
好了,现在工作正常。万一有人真的想知道它是如何工作的,那就太琐碎了。刚刚按照查询中的顺序在所有三个字段上创建了一个索引,explain()命令似乎正在使用索引。:)