2016-08-11 67 views
0

我想弄清楚多鍵索引的界限與我有一個例子。帶邊界的多鍵索引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行作爲我的輸出,而不只是一個排。

有人可以解釋這是怎麼工作的?

回答

1

兩個$gte$lte必須文檔的result.find()方法陣列內的至少一種元素相匹配。因此,對於$gte: 5, $lte: 8

  • _id: 2具有[ 4, 3 ] =>$lte: 8匹配任一元素,但$gte: 5無法匹配任何34,所以不返回;
  • _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數組中,它將匹配該文檔!