MongoDB2.5.0(开发版),包含一个新的查询引擎实现。查询引擎的主要工作是通过查询条件查询匹配的数据。当然,这包括索引的使用。自MongoDB4年前发布以来,现有的查询引擎基本没有变化。它最大的问题是缺乏可扩展性,没有查询优化功能(我们知道MongoDB的查询优化其实是通过试错来完成的)。在2.5.0版本中,查询引擎被完全重写,由三个独立的部分组成:解析查询语句的语法树(AST:abstractsyntaxtree)模块和将BSON查询条件解析成AST的解析模块,是完全重写的查询API层。其功能类似于现有的查询模块。这个改动主要是为后续的查询优化工作做铺垫。其中最重要的功能点之一就是索引交集的实现。例如,你的查询条件是{a:5,b:6},此时你对a和b两个字段有独立的索引。在当前的查询引擎下,MongoDB只能使用其中一个索引。比如找到所有值为5的记录,然后一条一条遍历,找出b的值为6。(或者反向查b的索引,然后遍历a的值为5).索引交集函数在现有情况下可以通过对a和b两个独立的索引进行交集,直接得到a=5和b=6的记录(目前稳定版需要建立联合索引来实现)。除了普通索引之外,该功能还将扩展到地理位置索引和全文索引。(比如获取3.5公里范围内所有满足xxx条件的人)另外,使用新的查询引擎,还可以实现一些更高级的查询,比如查询a==b+c的记录。稍后你可以写:{a:{$sum:[“$b”,“$c”]}})。这种功能很容易为新的查询引擎实现。新的查询引擎现已被重写并准备好进行测试。如果有兴趣测试,可以下载最新的2.5.0版本进行试运行。【下载】相关代码都在github上:ASTRootParserRoot来源:blog.mongodb.org
