Добавьте составной индекс, когда некоторые поля могут быть нулевыми или массивами строк
У меня есть коллекция mongodb.
{
"p1": "V1",
"p2": ["V2","V3","V4"],
"p3": ["V5","V6","V7"],
"p4": "V8"
}
Я хочу создать индекс по полям p1
, p2
, p3
, Мои документы могут не иметь p2
или же p3
, Как мне создать свой индекс?
2 ответа
По вашему вопросу ясно, что вы собираетесь создать составной многоключевой индекс, где два из них являются массивом. Но ограничение compound multikey index
есть не более одного индексированного поля, значение которого является массивом.
Составные многопользовательские индексы Для составного многопользовательского индекса каждый индексированный документ может иметь не более одного индексированного поля, значение которого является массивом. Таким образом, вы не можете создать составной многоключевой индекс, если более одного поля для индексации документа является массивом. Или, если составной многопользовательский индекс уже существует, вы не можете вставить документ, который нарушил бы это ограничение.
Таким образом, в соответствии с руководством mongodb вы можете взять либо p1
или же p2
как проиндексированное поле.
узнайте больше о составном мультиключевом индексе здесь
Ваш документ может не иметь индексированных полей. В этом случае можно использовать разреженный индекс.
Для данной коллекции:
db.collection.createIndex( { p1:1, p2:1, p4:1 } , { sparse: true } )
создаст Sparse Index
, Но вы должны учитывать следующие ограничения:
Если какой-либо документ не содержит индексированного поля, разреженный индекс не будет содержать запись для этого документа.
Использование
hint
может решить ограничение 1, но вы можете получить неполный результат.
Вы можете узнать больше о разреженном индексе здесь
Если предположить, p2
а также p3
может отсутствовать или может быть равен null
Я бы пошел на разреженный индекс, например, так:
db.myCollection.createIndex( { p1:1, p2:1, p3:1 } , { sparse: true } )