$strLenCP(码点长度)
最后更新:2026-10-09
$strLenCP(码点长度)
$strLenCP 返回字符串的 Unicode 码点数量,即人类感知的「字符数」。它对中文、日文、emoji 都按 1 计数,适合做昵称长度限制、文本摘要等业务逻辑。与按字节计数的 $strLenBytes 不同,多字节字符不影响结果。注意组合字符(如肤色修饰的 emoji)可能占多个码点。判断空字符串时,长度 0 即为空,可直接用于过滤条件。
| 分类 | 字符串 |
|---|---|
| MongoDB 版本 | 1.0+ |
| 示例语言 | mongosh (Shell) |
📝 语法
{ $strLenCP: <字符串表达式> }
⚙️ 参数
| 字符串 | 必填,要计算长度的字符串表达式。 |
|---|
返回值:字符串的码点长度(字符数)整数。
▶ 示例
请在本地安装的 mongosh 中执行以下命令(需已启动 mongod):
// $strLenCP:校验昵称长度
db.users.aggregate([
{ $project: { len: { $strLenCP: '$nickname' } } }
])
运行结果:
{ "_id": 1, "len": 4 }
{ "_id": 2, "len": 2 }
📌 注意事项
- 一个汉字、一个 emoji 都算 1 个码点
- 组合字符(如肤色修饰的 emoji)可能占多个码点,长度会超过视觉字符数
- 需要存储字节数时用 $strLenBytes
🏷️ 相关标签
💡 相关案例
更多实战案例即将上线,敬请期待。
📚 相关教程
❓ 常见问题
Q限制昵称 20 字用哪个?
A用 $strLenCP,它按字符计数。
Q和 $strLenBytes 结果差多少?
A中文每字差 2 个字节的差距。
Qemoji 算几个?
A简单 emoji 算 1,组合 emoji 可能算 2 个以上码点。