当前位置: 首页 > 知识库问答 >
问题:

为什么Spring BootmongoDb findAll()返回空数组?

傅朗
2023-03-14

我有一个Spring Boot应用程序连接到本地mongoDB数据库。当我试图从集合中获取所有记录时,它返回一个空数组。在输出中,它表示已连接到端口27017。它在运行应用程序时不会给我任何错误,但在我键入时只返回一个空数组http://localhost:8080/courses/我错过了什么?

模范班

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;
    }

}

控制器类

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);
    }
}

存储库类

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输出

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

共有1个答案

乔俊才
2023-03-14

出现这个问题的原因是,模型类中没有明确给出集合名称,因此spring data将集合名称从类名(Courses)派生为驼峰大小写(Courses)。由于您的实际收藏名为课程,因此未找到任何结果。

你必须要么:

>

  • 将集合重命名为课程。或
  • 像这样用正确的集合名称注释模型类:

    @Document(collection=“Courses”)

    公共类课程{

  •  类似资料:
    • 我和我的同事有一个bug,这是由于我们假设调用的空流将返回。 当然,这是我们假设而不阅读文档的错误。但我不理解的是,为什么空流的默认行为返回。这样做的理由是什么?与(相反返回false)一样,该操作以命令方式使用,脱离单子,可能用于语句。考虑到这些事实,是否有任何理由让空流上的默认为对于大多数用途是可取的?

    • (免责声明:人们通过facebook、firebase等请求询问使用异步操作时数据为空/不正确时,会产生很多问题。我提出这个问题的目的是为每个从android异步操作开始的人提供一个简单的答案。) 我试图从我的一个操作中获取数据,当我使用断点或日志调试它时,值就在那里,但当我运行它时,它们总是空的,我该如何解决这个问题呢? 火力基地 脸书 等。

    • 问题内容: 我和我的同事有一个错误,这是由于我们假设会返回空流调用而导致的。 当然,假定和不阅读文档是我们的错。但是我不明白的是为什么空流的默认行为会返回。这是什么原因呢?像(相反地返回false)一样,此操作以命令式方式使用,它离开了monad,并且可能在语句中使用了。考虑到这些事实,是否有任何理由使大多数用途都需要默认为空流? 问题答案: 这就是所谓的虚无事实。空集合的所有成员都满足您的条件;

    • 我有点困惑php函数布尔瓦尔是如何工作的。考虑以下几点

    • 通过下面的代码片段,我试图运行一个查询,该查询更新数据或将新数据插入名为的表中。该表包含一个名为和的列。如果中已经有一个节点,则更新中以毫秒为单位的时间。否则,将插入新的信息。 问题是,下面的代码片段无法将数据插入到数据库的表中。原因是声明: 那么应该如何编辑代码,以便更新重复值并插入新值呢?

    • 问题内容: 在空字符串上分割将返回大小为1的数组: 考虑这返回空数组: 请解释 :) 问题答案: 出于同样的原因 和 将返回一个大小为2的数组。将第一个匹配之前的所有内容作为第一个元素返回。