2017-01-16 60 views

回答

1

我想你不需要創建另一個索引{a:1},因爲prefixes

索引前綴是索引字段的開始子集。例如,考慮下面的化合物索引:

{ "item": 1, "location": 1, "stock": 1 } 

索引具有以下索引的前綴:

{ item: 1 } 
{ item: 1, location: 1 } 

對於複合索引,MongoDB的可以使用索引來支持查詢的索引前綴。這樣,MongoDB的可以使用查詢的索引上的以下字段:

  • item字段,
  • item字段和location字段,
  • item字段和location字段和stock領域。

和創建複合索引是更有效的[1]
而MongoDB可以使用整個索引或索引前綴的交集[2]

1

查看MongoDB文檔Create a compound index

以下操作創建的項目和股票領域的升序索引:

db.products.createIndex({ "item": 1, "stock": 1 }) 

除了支持匹配所有索引字段的查詢, 複合索引可以支持匹配的是查詢索引字段的前綴 。 即,索引支持查詢的item字段 以及既itemstock字段:

db.products.find({ item: "Banana" }) 
db.products.find({ item: "Banana", stock: { $gt: 5 } }) 

對於複合索引,MongoDB的可以使用索引來支持查詢的索引前綴。

順便說一句,如果你創建一個複合索引:

{ "item": 1, "location": 1, "stock": 1 } 

MongoDB中可以使用的查詢索引以下字段:

  • 的項目領域,
  • 項字段以及位置字段
  • 項目字段和位置字段以及股票字段。

但它不會像itemstock那樣高效。

希望這會有所幫助。

+0

這並沒有真正回答我的問題,但你的鏈接確實如此。 「集合上的以下索引:{x:1,y:1,z:1}可以支持以下索引支持的查詢:{x:1},{x:1,y:1}」 – RainingChain

+0

@RainingChain對不起爲此,我更新了我的答案,希望這有助於。 – McGrady

相關問題