2016-03-15 66 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' –