春天数据mongodb最喜欢

时间:2016-03-15 08:16:52

标签: java mongodb spring-mvc spring-data-mongodb

我正在使用mongodb有一个集合,其中我正在为不同的用户存储项目的状态,它就像"userItemstatus" = 1 or 2。这意味着1喜欢该项目,2意味着不喜欢该项目。

"_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")
}

现在我想得到最受欢迎的项目。 i,具有最多"userItemStatus"= 1个数的项目。我已经阅读了关于聚合但我有问题使用它与spring数据mongodb。我是使用spring数据mongodb的新手。请帮忙。

1 个答案:

答案 0 :(得分: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();
} 

无论如何,您将从最喜欢的方式开始排序结果。您可以使用LimitOperation limit = limit(20);user_likedislike替换为您的收藏名称来限制元素