2016-03-15 65 views
0

我正在使用mongodb有一個集合,其中我爲一個不同的用戶存儲一個物品的狀態,它就像"userItemstatus" = 1 or 2。這意味着1喜歡該物品,2喜歡該物品。春天的數據mongodb最大喜歡

"_id" : NumberLong(104009), 
    "_class" : "com.samepinch.domain.registration.UserItemHistory", 
    "user_id" : NumberLong(85861), 
    "item_id" : NumberLong(103468), 
    "catagory" : "MISCELLANEOUS", 
    "userItemStatus" : 1, 
    "createdDate" : ISODate("2016-02-08T11:43:40.351Z"), 
    "updatedDate" : ISODate("2016-02-08T11:43:43.780Z") 
} 
{ 
    "_id" : NumberLong(104018), 
    "_class" : "com.samepinch.domain.registration.UserItemHistory", 
    "user_id" : NumberLong(85861), 
    "item_id" : NumberLong(103352), 
    "catagory" : "MISCELLANEOUS", 
    "userItemStatus" : 2, 
    "createdDate" : ISODate("2016-02-08T11:44:26.803Z"), 
    "updatedDate" : ISODate("2016-03-17T19:34:07Z") 
} 

現在我想得到最喜歡的物品。我,e項目的最多號碼爲"userItemStatus"= 1。我已閱讀關於聚合,但我有與彈簧數據mongodb一起使用它的問題。我是使用彈簧數據mongodb的新手。請幫忙。

+0

simutaneously u有基於項目集合{categorycount在類更新項目限制因素出發:{ 「雜項」:3, 「MISCELLANEOUS1」:1, 「MISCELLANEOUS2」:4 }} –

回答

0
public class ValueCount { 

    private String userid; 
    private int likes; 
    public String getValue() { 
     return value; 
    } 
    public void setValue(String value) { 
     this.value = value; 
    } 
    public int getCount() { 
     return count; 
    } 
    public void setCount(int count) { 
     this.count = count; 
    } 


} 
public List<ValueCount> agg(){ 
    Criteria cr = Criteria.where("userItemStatus").is("1"); 

    MatchOperation m = match(cr); 
    GroupOperation g = group("item_id").count().as("count"); 
    ProjectionOperation p = project("count").and("item_id").previousOperation(); 
    SortOperation s = sort(Sort.Direction.DESC,"count"); 
    LimitOperation limit = limit(20); 
    Aggregation agg = newAggregation(m,g,p,s,limit); 
    AggregationResults<ValueCount> groupResults = mongoTemplate.aggregate(agg,"user_likedislike",ValueCount.class); 
    return groupResults.getMappedResults(); 
} 

你會得到無論如何排序結果從最高likes.You可以使用LimitOperation limit = limit(20);您的藏品名稱替換user_likedislike

+0

thanx的答案,但它的givng我空當我priting groupResults.getMappedResults()。 –

+0

我編輯了一些change.it後會現在工作我沒有測試,但會will.make確保您的集合名稱'user_likedislike' –