鉴于此数据结构
{
_id: ...,
data: [
{key: 'articles.0.photos.0.category', value: '...'},
{key: 'articles.0.photos.1.category', value: '...'},
...
]
}
...我想按键和值查询,例如
key == 'articles.0.photos.0.category' && value == 'something'
而键和值完全是任意的,因此键值模式能够在两者上创建索引。键中的数字表示数组中的索引。
如果查询只查找逻辑含义,而不是数组中的位置,我需要通过正则表达式进行搜索,例如
^articles\.\d+\.photos\.\d+\.caption
这是灾难性能的公式还是可以在更大的数据集中工作?索引和查询任意数据是否有更好的解决方案?
答案 0 :(得分:1)
在db上直接运行一些测试后,我得出结论,使用上面的正则表达式对我的场景非常有效。在具有100个键值对象的嵌套数组的200k文档样本集上,完整索引扫描从字符串匹配的0.001ms上升到平均正则表达式匹配的0.004ms。那太好了。不使用索引时,查询时间范围为5秒到20秒。