2017-03-02 54 views
1

鑑於數據:是否可以在Spring Data MongoDB中將group()與ArrayOperators.arrayOf()結合使用?

{ 
    "_id" : ObjectId("58b7fb9acdcf58886fa86136"), 
    "cost" : 50, 
    "nodes" : [ 
     4, 8, 15, 16, 23, 42 
    ] 
} 

{ 
    "_id" : ObjectId("58b7fba3cdcf58886fa86137"), 
    "cost" : 25, 
    "nodes" : [ 
     1, 2, 3, 4, 23, 6 
    ] 
} 

{ 
    "_id" : ObjectId("58b7fbaecdcf58886fa86138"), 
    "cost" : 75, 
    "nodes" : [ 
     1, 2, 17, 19, 20, 21 
    ] 
} 

我可以由第二元件這樣的陣列中使用聚合MongoDB中到組:

db.stuff.aggregate([ 
{ 
  "$group": { 
    "_id": {"$arrayElemAt": ["$nodes", 1]}, 
    "costs": {$sum: "$cost"} 
  } 
}]) 

在Spring數據MongoDB中,我最終使用以下Java代碼來獲得相同的結果:

Aggregation aggTest = Aggregation.newAggregation(
    project() 
     .and(ArrayOperators.arrayOf("nodes").elementAt(1)).as("node") 
     .and("cost").as("cost"), 
    group("node").sum("cost").as("costs") 
); 

是否有可能結合在Spring數據星期一使用組()與ArrayOperators.arrayOf()的ElementAt。 goDB,因此刪除額外的項目()?

回答

1

看起來像春天小組階段mongo db不需要AggregationExpression_id

你可以嘗試創建一個AggregationOperation

AggregationOperation group = new AggregationOperation() { 
     @Override 
     public DBObject toDBObject(AggregationOperationContext context) { 
     return new BasicDBObject(
       "$group", new BasicDBObject(
        "_id", new BasicDBObject(
        "$arrayElemAt", Arrays.asList("nodes", 1))).append(
       "costs", new BasicDBObject("$sum", "cost"))); 
     } 
    }; 

Aggregation agg = Aggregation.newAggregation(group); 
+0

不是我想聽到的,但感謝的替代品。我將研究爲什麼Group不會爲_id採用AggregationExpression。 –

相關問題