spring整合mongo给出的mongoTemplate在进行count的时候是不使用索引的(find可以)!!!!!虽然mongo执行语句时会自动帮我们进行优化,但可能并不是我们想要使用的那个索引
-
表字段
-
加上索引
-
使用客户端进行查询
db.play_following.find({"obj_type":"game","channel":"hao"}).hint("channel_index").count()
(hint表示使用某一个索引) 查询结果(1.6s内返回) -
使用mongoTemplate进行查询(60s返回,机器性能也有关系) 跟踪源码可以看到在count的时候先进行了query转化为DBObject的动作,但是我们的hint并没有被其加以转化,所以我们索引并没有被使用
-
解决办法:使用mongo原生的驱动(以下为参考):
mongoTemplate.getDb().getCollection(PlayerFollowingPO.class.getAnnotation(Document.class).collection()).count(countDBObject, new DBCollectionCountOptions().hintString(index))