带边界的多键索引mongodb
问题描述:
我想弄清楚多键索引的界限与我有一个例子。带边界的多键索引mongodb
s1:PRIMARY> db.inventory.find();
{ "_id" : 2, "item" : "ABCx", "ratings" : [ 4, 3 ] }
{ "_id" : 3, "item" : "ABC", "ratings" : [ 2, 9 ] }
{ "_id" : 4, "item" : "XYZ", "ratings" : [ 4, 3 ] }
我一找到这样
s1:PRIMARY> db.inventory.find({ ratings: { $gte: 5 ,$lte:8} });
输出:
{ "_id" : 3, "item" : "ABC", "ratings" : [ 2, 9 ] }
按照这里的文档和我引用(报价包含比我不同的例子)
查询会在等级数组中搜索至少一个大于等于3的 以及至少一个小于等于6的元素。 由于单个元素不需要满足两个条件,因此MongoDB 不会与范围并使用[[3,Infinity]]或[ - 无穷大,6]]。 MongoDB不保证它选择哪个这两个边界。
https://docs.mongodb.com/manual/core/multikey-index-bounds/
在此基础上的文档,我应该有所有3行作为我的输出,而不只是一个排。
有人可以解释这是怎么工作的?
答
两个$gte
和$lte
必须文档的result
在.find()
方法阵列内的至少一种元素相匹配。因此,对于$gte: 5, $lte: 8
:
-
_id: 2
具有[ 4, 3 ]
=>$lte: 8
匹配任一元素,但$gte: 5
无法匹配任何3
或4
,所以不返回; -
_id: 3
有[ 2, 9 ]
=>$lte: 8
匹配2
和$gte: 5
匹配9
,所以它被返回; -
_id: 4
有[ 4, 3 ]
=>与_id: 2
相同。
因此,只有返回_id: 3
的文档才有意义。将一个元素$gte: 5
添加到_id: 2
或_id: 4
文档的result
数组中,它将匹配该文档!