1

我很難搞清楚如何爲下面的聚合查詢編寫彈簧數據實現。我的問題的一些背景,可以發現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(參數)必須固定,但我不不知道如何。我想從結果中的資產文檔中提取幾個字段。幫助表示讚賞。謝謝。

回答

2

如果要提供一個BasicDBObject到$push然後使用.append方法來增加額外的字段:

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

還要注意使用「輸入」輸出時,可以使用類的類型必須的結構匹配「輸出「而不是正在使用的」輸入「類,因爲它們當然會有所不同。

+0

謝謝,這工作。你有沒有使用「類型」輸出類的例子?例如,如果我想使用AssetStats.java它應該如何看起來像? –

+0

其實我想到如何使用「輸入」輸出。上面的java代碼中的最後一行應該如下所示:AggregationResults results = mongoTemplate.aggregate(aggregation,「asset」,AssetStats.class); –