String(字符串)
最后更新:2026-10-09
String(字符串)
String是MongoDB最常用的字段类型,存储UTF-8编码文本。查询用`$eq`、`$regex`精确/模式匹配,全文搜索需先建text索引再用`$text`。注意:把数字、日期存成字符串后,范围比较和排序按字典序而非数值序(如'9'大于'10'),会导致错误结果。
| 分类 | BSON 类型 |
|---|---|
| MongoDB 版本 | 1.0+ |
| 示例语言 | mongosh (Shell) |
📝 语法
{ name: "apple" }
{ name: { $regex: "^app" } }
db.articles.find({ $text: { $search: "mongodb" } })
返回值:字符串值本身;查询时返回匹配的文档
▶ 示例
请在本地安装的 mongosh 中执行以下命令(需已启动 mongod):
// String:正则与全文搜索
use shop
db.users.find({ email: { $regex: '@example\\.com$' } })
db.articles.find({ $text: { $search: 'mongodb indexing' } })
运行结果:
// 返回邮箱以@example.com结尾的用户,以及正文含mongodb/indexing的文章
📌 注意事项
- 存储为UTF-8,索引键有长度上限(约1KB)
- 数字字段别用字符串存,排序会比较错
- 字符串比较大小写敏感
- $regex无前缀锚定无法用索引,会全表扫描
🏷️ 相关标签
💡 相关案例
📚 相关教程
❓ 常见问题
QString和ObjectId什么时候用?
A业务标识(外部ID、订单号)用String;需要自动唯一且按时间排序的用ObjectId。
Q字符串能建索引吗?
A可以。普通索引用于等值与范围匹配,text索引用于全文搜索。
Q为什么'9'比'10'大?
A字符串按字典序逐字符比较,'9'的字符码大于'1',所以'9'排在'10'后面。