首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么使用mongoDb findAll()的Spring返回空数组?

为什么使用mongoDb findAll()的Spring返回空数组?
EN

Stack Overflow用户
提问于 2019-07-13 19:43:00
回答 2查看 4.4K关注 0票数 1

我有一个spring引导应用程序连接到本地mongoDB数据库。当我尝试从集合中获取所有记录时,它返回一个空的array.In,它说输出连接到端口27017。在运行应用程序时,它不会给我任何错误,但是当我输入http://localhost:8080/courses/时,只返回一个空数组,这里我遗漏了什么?

模型类

代码语言:javascript
复制
package SpringBoot.Training.Management.Tool.SpringBootTMTCourses.Model;

import org.bson.types.ObjectId;
import org.springframework.data.annotation.Id;

public class Courses {
    @Id
    public ObjectId _id;

    public String courseID;
    public String courseName;

    public Courses(ObjectId _id, String courseID, String courseName) {
        super();
        this._id = _id;
        this.courseID = courseID;
        this.courseName = courseName;
    }

    public String get_id() {
        return _id.toHexString();
    }

    public void set_id(ObjectId _id) {
        this._id = _id;
    }

    public String getCourseID() {
        return courseID;
    }

    public void setCourseID(String courseID) {
        this.courseID = courseID;
    }

    public String getCourseName() {
        return courseName;
    }

    public void setCourseName(String courseName) {
        this.courseName = courseName;
    }

}

控制器类

代码语言:javascript
复制
package SpringBoot.Training.Management.Tool.SpringBootTMTCourses.Controller;

import java.util.List;

import org.bson.types.ObjectId;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import SpringBoot.Training.Management.Tool.SpringBootTMTCourses.Model.Courses;
import SpringBoot.Training.Management.Tool.SpringBootTMTCourses.Repository.CoursesRepository;

@RestController
@RequestMapping("/courses")
public class CourseController {
    @Autowired
    private CoursesRepository repository;

    @RequestMapping(value = "/", method = RequestMethod.GET)
    public List<Courses> getAllCourses() {
      return repository.findAll();
    }

    @RequestMapping(value = "/{id}", method = RequestMethod.GET)
    public Courses getPetById(@PathVariable("id") ObjectId id) {
      return repository.findBy_id(id);
    }
}

存储库类

代码语言:javascript
复制
package SpringBoot.Training.Management.Tool.SpringBootTMTCourses.Repository;

import org.bson.types.ObjectId;
import org.springframework.data.mongodb.repository.MongoRepository;

import SpringBoot.Training.Management.Tool.SpringBootTMTCourses.Model.Courses;

public interface CoursesRepository extends MongoRepository<Courses, String> {
    Courses findBy_id(ObjectId _id);
}

MongoDb输出

代码语言:javascript
复制
db.Courses.find().pretty()
{
        "_id" : ObjectId("5d29c3a58212eda90db024c4"),
        "courseID" : "1",
        "courseName" : "C#"
}
{
        "_id" : ObjectId("5d29c3a58212eda90db024c5"),
        "courseID" : "2",
        "courseName" : "Java"
}
{
        "_id" : ObjectId("5d29c3a58212eda90db024c6"),
        "courseID" : "3",
        "courseName" : "JavaScript"
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-07-13 20:22:12

之所以会出现这个问题,是因为您的模型类中没有显式地给出集合名称,所以spring-data将集合名从类名(Courses)派生为camel case (courses)。由于您的实际集合名为Courses,因此找不到结果。

你必须要么:

  1. 将集合重命名为courses
  2. 用正确的集合名称注释模型类,如下所示: @Document(collection = "Courses") public class Courses {
票数 8
EN

Stack Overflow用户

发布于 2022-11-06 13:16:06

我也遇到过类似的问题,在回购MatchRepository extends MongoRepository<Match, Integer>中我的自定义方法。

我将标识符从Integer更改为String,它对我有效。比如:MatchRepository extends MongoRepository<Match, String>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57022303

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档