spring数据mongodb最大赞
spring data mongodb maximum likes
我正在使用 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")
}
现在我想得到最喜欢的项目。即,"userItemStatus"= 1
数量最多的项目。我已阅读有关聚合的信息,但我在将它与 spring 数据 mongodb 一起使用时遇到问题。我是使用 spring 数据 mongodb 的新手。请帮忙。
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
替换为您的集合名称
我正在使用 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")
}
现在我想得到最喜欢的项目。即,"userItemStatus"= 1
数量最多的项目。我已阅读有关聚合的信息,但我在将它与 spring 数据 mongodb 一起使用时遇到问题。我是使用 spring 数据 mongodb 的新手。请帮忙。
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
替换为您的集合名称