使用正则表达式和通配符查询任意数据

时间:2014-01-04 18:00:03

标签: regex performance mongodb

鉴于此数据结构

{
    _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

这是灾难性能的公式还是可以在更大的数据集中工作?索引和查询任意数据是否有更好的解决方案?

1 个答案:

答案 0 :(得分:1)

在db上直接运行一些测试后,我得出结论,使用上面的正则表达式对我的场景非常有效。在具有100个键值对象的嵌套数组的200k文档样本集上,完整索引扫描从字符串匹配的0.001ms上升到平均正则表达式匹配的0.004ms。那太好了。不使用索引时,查询时间范围为5秒到20秒。