У меня есть следующие данные в коллекции с именем articles
:
{
"_id": "1",
"attributes": [
{
"id": "providercode",
"value": "code1"
},
{
"id": "otherAttribute",
"value": "very long value than will be longer than 1024 bytes limit of an index value so I will get 'got unwanted exception: WiredTigerIndex::insert: key too large to index'"
},
{
"id": "objectAttr",
"value": {
"ican": "alsobeanobject"
}
}
]
}
Я хочу получить статьи, имеющие "code1" в его атрибуте providercode.
Я ищу по этому запросу:
db.articles.find({ attributes: { $elemMatch: { "id": "providercode", "value": "code1" }}})
Мне нужен индекс, который будет применяться к предыдущему запросу.
Я попробовал этот индекс:
db.articles.ensureIndex({ "attributes.id": 1, "attributes.value": 1 })
Это может сработать, но не сработает из-за потенциально очень больших строк в attributes.value
.
Я получаю ошибку:
Error got unwanted exception: WiredTigerIndex::insert: key too large to index
Мой вопрос (ы):
- есть ли способ сделать своего рода частичный индекс для моего атрибута кода провайдера (индексировать только часть атрибутов
providercode
)?
- Есть ли способ пропустить индексацию недопустимого (слишком длинного)
attribute.value
(как при mongodb <2.6)? </li>
Дополнительная информация:
providercode
значение всегда будет достаточно короткой для индекса
- каждый документ статьи будет иметь атрибут поставщика кода
- Я с mongodb 4.X