Spring聚合查询的数据等价物
Spring Data equivalent of aggregation query
我很难弄清楚如何为下面的聚合查询编写 spring 数据实现。可以找到我的问题的一些背景
db.asset.aggregate([{$unwind:"$folderIds"}, {$group:{_id: "$folderIds",assets:{$push: {assets_id:"$_id",display_name:"$displayName"}}}}])
到目前为止我已经得到了下面的代码
AggregationOperation unwind = Aggregation.unwind("folderIds");
AggregationOperation groupFolderIds = Aggregation.group("folderIds")
.push(new BasicDBObject().put("assetId", "$_id")).as("assets");
Aggregation aggregation = Aggregation.newAggregation(unwind, groupFolderIds);
AggregationResults<Map> results = mongoTemplate.aggregate(aggregation, "asset", Map.class);
我知道必须修复 .push() 的参数,但我不知道如何修复。我想从结果中的资产文档中提取一些字段。感谢帮助。谢谢。
如果您向 $push
提供 BasicDBObject,则使用 .append
方法添加其他字段:
Aggregation aggregation = newAggregation(
unwind("folderIds"),
group("folderIds")
.push(
new BasicDBObject("assets_id","$_id")
.append("display_name","$displayName")
).as("assets")
);
另请注意,在使用 "typed" 输出时,您使用的 class 类型必须匹配 "output" 的结构,而不是 "input" class 的结构正在使用,因为它们当然会有所不同。
我很难弄清楚如何为下面的聚合查询编写 spring 数据实现。可以找到我的问题的一些背景
db.asset.aggregate([{$unwind:"$folderIds"}, {$group:{_id: "$folderIds",assets:{$push: {assets_id:"$_id",display_name:"$displayName"}}}}])
到目前为止我已经得到了下面的代码
AggregationOperation unwind = Aggregation.unwind("folderIds");
AggregationOperation groupFolderIds = Aggregation.group("folderIds")
.push(new BasicDBObject().put("assetId", "$_id")).as("assets");
Aggregation aggregation = Aggregation.newAggregation(unwind, groupFolderIds);
AggregationResults<Map> results = mongoTemplate.aggregate(aggregation, "asset", Map.class);
我知道必须修复 .push() 的参数,但我不知道如何修复。我想从结果中的资产文档中提取一些字段。感谢帮助。谢谢。
如果您向 $push
提供 BasicDBObject,则使用 .append
方法添加其他字段:
Aggregation aggregation = newAggregation(
unwind("folderIds"),
group("folderIds")
.push(
new BasicDBObject("assets_id","$_id")
.append("display_name","$displayName")
).as("assets")
);
另请注意,在使用 "typed" 输出时,您使用的 class 类型必须匹配 "output" 的结构,而不是 "input" class 的结构正在使用,因为它们当然会有所不同。