Добавьте составной индекс, когда некоторые поля могут быть нулевыми или массивами строк

У меня есть коллекция 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, Но вы должны учитывать следующие ограничения:

  1. Если какой-либо документ не содержит индексированного поля, разреженный индекс не будет содержать запись для этого документа.

  2. Использование hint может решить ограничение 1, но вы можете получить неполный результат.

Вы можете узнать больше о разреженном индексе здесь

Если предположить, p2 а также p3 может отсутствовать или может быть равен nullЯ бы пошел на разреженный индекс, например, так:

db.myCollection.createIndex( { p1:1, p2:1, p3:1 } , { sparse: true } )

Другие вопросы по тегам