如何检索Mongodb范围内的日期

时间:2017-07-20 12:15:11

标签: spring mongodb aggregation-framework spring-mongo

MongoDB示例数据:

   {
      "couseId": "String",
      "assignmentId": "String",
      "studentId": "String",
      "submissionId": "String",
      "version": "String",
      "grade": "int"
    }

我想检索范围内的汇总数据(所有等级在50-100之间)。实际上我想得到上述等级范围的计数。

如何使用java spring mongo执行此操作。如果有人可以发布代码示例,那就太好了。

更新

使用Spring Aggregation Framework可以获得特定范围内有多少学生吗?

1 个答案:

答案 0 :(得分:1)

您可以在存储库中使用@Query注释执行此操作。这是一个例子。

<强> Course.java

@Document(collection = "courses")
public class Course {
    @Id
    private String courseId;
    private String assignmentId;
    private String studentId;
    private String submissionId;
    private String version;

    @Indexed
    private int grade;

    //constructor and getters and setters
}

<强> CourseRepository.java

@Repository
public interface CourseRepository extends MongoRepository<Couse, String> {

    // just put an JSON, just like MongoDB query
    @Query("{grade: {$gte: 50, $lte: 100}}")
    List<Course> findInGradeRange();
}

我希望它有所帮助。

修改

但是,如果你想动态设置范围(例如20-50),你可以这样做。

<强> CourseRepository.java

@Repository
public interface CourseRepository extends MongoRepository<Course, String> {}

<强> CourseService.java

@Service
public class CourseService {

    @Autowired
    private CourseRepository couseRepository;

    public List<Course> findByRange(int min, int max) {
        return courseRepository.findAll().stream()
                .filter(c -> c.getGrade() >= min && c.getGrade() <= max)
                .collect(Collectors.toList());
    }

}