我在名为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"
}
}
]
}
我想获取其providercode属性中包含“ code1”的文章。
我正在使用此查询进行搜索:
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)?其他信息:
providercode
值将始终是足够短的字符串以用于索引答案 0 :(得分:0)
解决方案实际上很简单。
我做了这些索引:
db.articles.ensureIndex({ "attributes.id": 1 });
db.articles.ensureIndex({ "attributes.value": "hashed" });
我的查询现在正在使用attributes.value
上的索引