【问题标题】:Spring Data equivalent of aggregation querySpring Data 等价于聚合查询
【发布时间】:2015-10-15 03:38:58
【问题描述】:

我很难弄清楚如何为以下聚合查询编写 spring 数据实现。我的问题的一些背景可以找到here

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() 的参数,但我不知道如何修复。我想从结果中的资产文档中提取一些字段。帮助表示赞赏。谢谢。

【问题讨论】:

    标签: java mongodb mongodb-query aggregation-framework spring-data-mongodb


    【解决方案1】:

    如果您向 $push 提供 BasicDBObject,则使用 .append 方法添加其他字段:

        Aggregation aggregation = newAggregation(
                unwind("folderIds"),
                group("folderIds")
                    .push(
                        new BasicDBObject("assets_id","$_id")
                         .append("display_name","$displayName")
                    ).as("assets")
        );
    

    还请注意,使用“类型化”输出时,您使用的类类型必须匹配“输出”的结构,而不是正在使用的“输入”类,因为它们当然会有所不同。

    【讨论】:

    • 谢谢你,这有效。您有使用“类型化”输出类的示例吗?例如,如果我想使用 AssetStats.java,它应该是什么样子?
    • 实际上我想出了如何使用“类型化”输出。上述 java 代码中的最后一行应该如下所示 AggregationResults results = mongoTemplate.aggregate(aggregation, "asset", AssetStats.class);
    猜你喜欢
    • 2014-03-05
    • 2017-05-02
    • 2015-12-17
    • 2015-10-09
    • 2020-04-29
    • 2021-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多