标签:
首先说一下 $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
标签:
原文地址:http://www.cnblogs.com/Kellana/p/5972808.html