2014-10-31 75 views
0

我有這樣的實體。MongoDB和Spring數據。在實體中獲取數組的大小

@Document 
public class Entity{ 
    @Id 
    private String id; 
    private Set<Integer> ids; 
} 

我需要得到數組的大小IDS

如何可以使用Spring的數據聚合框架來完成?

我想是這樣的:

AggregationOperation match = Aggregation.match(where("id").is(id)); 
AggregationOperation group = Aggregation.group("ids"); 
Aggregation aggregation = Aggregation.newAggregation(match, group); 
template.aggregate(aggregation, Entity.class, Entity.class); 

好像我這樣做完全錯誤的。

回答

0

我已經找到了解決方案!

Aggregation aggregation = Aggregation.newAggregation(Aggregation.match(match), 
       Aggregation.project("ids"), Aggregation.unwind("ids"), Aggregation.group().count().as("count")); 

現在,它工作正常,沒有獲得數組中的所有項目。

UPD:這是一個更好的

Aggregation aggregation = Aggregation.newAggregation(
       Aggregation.match(where("id").is(id)), 
       Aggregation.project().and("ids").project("size").as("count")); 
+1

不客氣 – AknKplnoglu 2014-11-04 10:49:30

0

你可以這樣使用;

Aggregation aggregation = newAggregation(match(criteria),group("ids").count().as("count")); 

這將產生:

{"yourPOJO":[{"ids":[...],"count":5},...]} 
+0

謝謝回答。但它產生我{「myPojo」:[{「ids」:[...],「count」:1,},...]} 它是正確的行爲,因爲它計數多少這樣的元素, 「,而不是他們存在多少元素。 – Shatranaft 2014-11-04 09:00:04

0

那麼你可以使用

Aggregation aggregation = newAggregation(match(criteria),group("ids").count().as("count"),unwind("ids"),group("ids._id").count().as("count1")); 
+0

謝謝。這不是正確的解決方案,但它幫助我找到正確的解決方案。 – Shatranaft 2014-11-04 10:41:48