MongoDB聚合查询报错:无法识别管道阶段名称'$pcount'
解决MongoDB聚合中"Unrecognized pipeline stage name: '$pcount'"错误
你应该是想给每个文档新增一个字段来存储products数组的长度,但用错了聚合管道的阶段名称——MongoDB里根本没有$pcount这个管道阶段,这就是报错的核心原因。
正确的实现思路
要统计数组字段大小并保存这个值,你需要用$addFields(或者$project)管道阶段,配合$size操作符来计算数组长度。
修正后的代码
// 用$addFields新增字段存储数组长度 BasicDBObject addFieldsStage = new BasicDBObject("$addFields", new BasicDBObject("productCount", new BasicDBObject("$size", "$products")) ); ArrayList<BasicDBObject> pipeline = new ArrayList<>(); pipeline.add(addFieldsStage); AggregateIterable<Document> out = mini.aggregate(pipeline); MongoCursor<Document> cursor = out.iterator(); while(cursor.hasNext()){ System.out.println(cursor.next()); }
关键说明
$addFields:这个管道阶段会给每个文档新增指定字段(若字段已存在则覆盖),非常适合添加计算后的数组长度字段。$size:MongoDB专门用来计算数组类型字段长度的操作符,参数是你要统计的数组字段路径(比如$products)。- 如果你只想返回特定字段(而非所有原始字段加新字段),可以把
$addFields换成$project,手动指定要保留的字段和计算出的数组长度字段。
内容的提问来源于stack exchange,提问作者Nau Parejaa Escamilla
相关产品推荐
相关产品推荐

