MongoDB聚合$size操作符字段路径含数字时返回0如何解决?
MongoDB路径含数字字段的数组长度查询解决方案
问题根因
MongoDB解析点分隔的字段路径时,默认会将路径中的数字识别为数组索引,而非字符串类型的字段名。你原写法中的$this.is.the.field.path.0.here会被解析为取path数组的第0个元素的here字段,如果你的path实际是包含键为"0"的对象而非数组,解析结果就为null,$size计算null的长度会固定返回0,就是你遇到的错误情况。
解决方案
方案1:MongoDB 5.0及以上版本(推荐)
使用$getField显式指定要获取的特殊名称字段,避免数字被识别为数组索引:
{ $project: { "alias": { $size: { $getField: { field: "here", input: { $getField: { field: "0", input: "$this.is.the.field.path" } } } } } } }
方案2:兼容MongoDB 4.4及更低版本
通过$objectToArray将对象转为键值对数组,过滤出键为"0"的项后再取对应数组长度:
{ $project: { "alias": { $size: { $let: { vars: { zero_item: { $first: { $filter: { input: {$objectToArray: "$this.is.the.field.path"}, cond: {$eq: ["$$this.k", "0"]} } } } }, in: "$$zero_item.v.here" } } } } }
内容的提问来源于stack exchange,提问作者science cam
相关产品推荐
相关产品推荐

