$size(返回数组长度)
最后更新:2026-10-09
$size(返回数组长度)
$size 返回数组的元素个数,结果是非负整数。它是最常用的数组元数据操作符,典型场景包括统计订单商品数量、判断数组是否为空、或在 $match 里过滤长度达到阈值的文档(配合 $expr)。参数必须是数组,传字符串或数字会直接报错;字符串长度要用 $strLenCP。$size 不能用在 $match 的普通查询语法里,必须放进 $expr。
| 分类 | 数组 |
|---|---|
| MongoDB 版本 | 1.0+ |
| 示例语言 | mongosh (Shell) |
📝 语法
{ $size: <数组> }
⚙️ 参数
| 数组 | 要计算长度的数组表达式。 |
|---|
返回值:数组元素个数(非负整数);参数不是数组时报错
▶ 示例
请在本地安装的 mongosh 中执行以下命令(需已启动 mongod):
// $size:统计每个订单的商品数
db.orders.aggregate([
{ $project: {
itemCount: { $size: '$items' }
} }
])
运行结果:
{ '_id': 1, 'itemCount': 2 }
{ '_id': 2, 'itemCount': 5 }
📌 注意事项
- 参数必须是数组,否则报错;字段可能缺失时先 $ifNull 兜底成空数组
- 在 $match 里过滤数组长度要用 { $expr: { $gte: [{ $size: '$tags' }, 3] } }
- 字符串长度用 $strLenCP,不要用 $size
🏷️ 相关标签
💡 相关案例
更多实战案例即将上线,敬请期待。
📚 相关教程
❓ 常见问题
Q$size 能用在查询条件里吗?
A普通查询语法不行,要放进 $expr,如 { $expr: { $gt: [{ $size: '$tags' }, 2] } }。
Q字段不存在时 $size 会怎样?
A会报错。先 $ifNull 或 $cond 判断,缺失时按 0 处理。
Q$size 能数字符串长度吗?
A不能,字符串不是数组。字符串长度用 $strLenCP。