Mongodb

Mongodb:如何在同一欄位上創建多個索引?

  • March 25, 2021

例如,我創建了這個索引:

db.test.createIndex({field1:1}, {partialFilterExpression:{field2:{$gt:10}}})

索引創建成功。然後我想創建第二個索引:

db.test.createIndex({field1:1}, {partialFilterExpression:{field2:{$lte:10}}}

但上面會給出錯誤 IndexOptionsConflict,但沒有錯誤細節,只轉儲索引對象。

我已經測試過在 PostgreSQL 上創建這樣的索引並且它可以工作。我怎樣才能在 MongoDB 中做到這一點?

可悲的是,MongoDB的限制:

限制

在 MongoDB 中,您不能創建僅在選項上有所不同的索引的多個版本。因此,您不能創建僅通過過濾器表達式不同的多個部分索引。

現在,你只能這樣做:

db.test.createIndex({field1:1}, {partialFilterExpression:{field2:{$gt:10,$lte:10}}})

或者使用帶有佔位符欄位的複合索引:

db.test.createIndex({field1:1, never_use_this_field1: 1}, {partialFilterExpression:{field2:{$gt:10}}})
db.test.createIndex({field1:1, never_use_this_field2: 1}, {partialFilterExpression:{field2:{$lte:10}}}

值得注意的是,這很可能會在 4.8 穩定版本中得到修復。 https://jira.mongodb.org/browse/SERVER-25023

引用自:https://dba.stackexchange.com/questions/252897