首页 > 代码库 > mongodb 中的Multikey Index Bounds解释$elemMatch

mongodb 中的Multikey Index Bounds解释$elemMatch

首先说一下 $elemMatch的用法:

{ _id: 1, results: [ 82, 85, 88 ] }

{ _id: 2, results: [ 75, 88, 89 ] }

$elemMatch是匹配document 中数组中至少有一个元素满足$elemMatch中的所有条件,例如:

db.scores.find(
   { results: { $elemMatch: { $gte: 80, $lt: 85 } } }
)

查询结果为:

{ "_id" : 1, "results" : [ 82, 85, 88 ] }

结下来解释一下(Multikey Index Bounds):
在一个查询期间,索引的扫描范围定义了部分索引为了搜索,当多个(条件)predicates 超过一个索引存在时:mongodb 将试图去合并这些(条件)predicates的边界,要么通过求交集的方法合并
要么通过组合的方法,为了去产生一个比较小的扫描范围。
给定一个索引数组字段,考虑到在一个查询中,在一个数组中指定了多个(条件)predicates并且可以使用 Multikey Index。
if $elemMatch 中有多个(条件)predicates ,mongodb会合并 Multikey Index的边界。因此,会有$elemMatch是匹配document 中数组中至少有一个元素满足$elemMatch中的所有条件。

继续上面的例子,逐个条件边界的范围:
大于等于80($gte:80)的边界为[80,inf];
小于85
($lt:85)的边界为[-inf,85]。
由于使用了$
elemMatch组织多个条件查询,mongodb查询的边界为results:[[80,85)].









 

mongodb 中的Multikey Index Bounds解释$elemMatch