非关系型数据库通配符
- 云服务器
- 2026-07-23
- 5
非关系型数据库中的通配符机制
通配符在不同非关系型数据库中用于模式匹配、索引覆盖或查询筛选,其实现和语义差异较大,以下按数据库类型分别说明主要用法。
文档型数据库 MongoDB
通配符索引
MongoDB 支持通配符索引(Wildcard Index),能够对文档中所有字段或指定路径下的字段建立索引,适用于字段名不固定或查询模式未知的场景。
- 创建语法:db.collection.createIndex( { "$" : 1 } ) 或 { "path.$" : 1 }
- 支持单字段、多字段及复合通配符索引。
- 通配符索引会覆盖文档中所有字段(包括嵌套文档),但无法用于 $text、$geo 等特殊查询。
正则表达式通配符
在查询条件中使用正则表达式,利用 或 ^ 等模式匹配字符串内容。
- 示例:db.collection.find( { field: /pattern/ } ) 或 { field: { $regex: "pattern" } }
- 非索引字段上的正则查询可能导致全表扫描,建议结合索引使用前缀表达式。
键值数据库 Redis
键模式匹配(KEYS 与 SCAN)
Redis 提供 KEYS pattern 和 SCAN cursor [MATCH pattern] 命令,支持通配符模式:
| 通配符 | 含义 | 示例 |
|——–|——|——|
| | 匹配任意数量字符 | keys user: |
| | 匹配单个字符 | keys user:?? |
| [abc] | 匹配方括号内任意字符 | keys user:[a-c] |
| x | 转义特殊字符 | keys user:? |
注意事项


- KEYS 会阻塞 Redis 单线程,生产环境应使用 SCAN 迭代。
- SCAN 的 MATCH 在每个迭代中应用模式,但返回结果可能包含不匹配项(客户端过滤)。
搜索引擎 Elasticsearch
通配符查询(Wildcard Query)
用于匹配字段值中通配符模式,常用于部分匹配或模糊搜索。

- 匹配零个或多个字符(不跨词)。
- 匹配单个字符。
- 示例:{ "wildcard": { "field": "tet" } }
- 可通过 rewrite 参数控制重写方式以优化性能。
- 在大数据量下通配符查询可能较慢,建议使用 ngram 或 edge_ngram 分词器替代。
正则查询(Regexp Query)
支持更复杂的模式,语法基于 Lucene 正则表达式。
- 示例:{ "regexp": { "field": "pattern" } }
- 通配符查询本身是正则查询的特例,但正则查询功能更强大,性能开销也更大。
列族数据库 Cassandra
CQL 中的 LIKE 操作
Cassandra 的 CQL 提供 LIKE 操作符,但仅支持 通配符,且只能用于聚类列(clustering column)或二级索引列(需开启 LIKE 支持)。
- 匹配任意数量字符,_ 匹配单个字符(CQL 3.11 后支持)。
- 示例:SELECT FROM table WHERE clustering_column LIKE 'prefix%'
- 性能:LIKE 'prefix%' 可利用聚类列前缀匹配,但 %prefix% 或 %suffix 会导致全表扫描。
其他数据库简表
| 数据库类型 | 通配符机制 | 备注 |
|---|---|---|
| Couchbase | WILDCARD 操作符(N1QL) | 支持 和 _,类似 SQL |
| HBase | 行键前缀扫描(PrefixFilter) | 不直接支持通配符,但可通过 Scan 的 setRowPrefixFilter 实现 |
| Neo4j | 字符串匹配(CONTAINS, STARTS WITH, ENDS WITH) | 无通配符,但支持正则表达式() |
相关问题与解答
问题 1:在 MongoDB 中,通配符索引与普通索引相比有哪些优缺点?
解答
- 优点:通配符索引无需提前指定字段名,适合字段名动态变化的集合(如日志、用户自定义属性);可覆盖所有字段,减少索引数量。
- 缺点:索引体积较大(存储所有字段的键值);无法针对特定字段优化查询性能;不支持 $text、$geo 等特殊索引类型;复合索引中通配符部分只能放在末尾。
问题 2:Redis 的 KEYS 命令为什么被建议避免在生产环境使用?
解答
KEYS 命令会扫描整个键空间,返回所有匹配的键,在键数量较多时(例如百万级)会阻塞 Redis 单线程,导致其他命令无法执行,可能引发服务中断或超时,最佳实践是使用 SCAN 命令配合 MATCH 模式,以游标方式增量迭代,避免阻塞。