gpt4 book ai didi

java - 如何在没有 ObjectId 的情况下将 Mongo 与 Spring Data 一起使用

转载 作者:搜寻专家 更新时间:2023-10-31 08:04:29 29 4
gpt4 key购买 nike

我有一个现有的 mongo 数据库,其中 id (_id) 作为纯字符串保存。这是 Mongo DB 中的示例数据:

{
"_id" : "528bb0e2e4b0442f1479f1b4",
"schoolId" : "URDLKYLFJXLWJGR193778316742298",
"surname" : "Lewis",
"admissionNumber" : "0347",
"firstName" : "Martins"
}

我有一个 Java 对象,它的形式是:

public class Student {

@Id
private String id;
private String schoolId;
private String surname;
private String admissionNumber;
private String firstName;
}

使用 getter 和 setter

我还有一个仓库:

public interface StudentRepository extends MongoRepository<Student, String> {

Student findOneBySurname(String surname);
Student findOneById(String id);
Student findOneBySurnameAndFirstName(String surname, String firstName);
}

当我执行 studentRepository.findAll() 时,我能够获取数据库中的所有学生,并正确填充他们的所有字段。

当我执行 studentRepository.findOne("528bb0e2e4b0442f1479f1b4") 或 studentRepository.findOneById)"528bb0e2e4b0442f1479f1b4") 时,它返回 null

当我对 mongo 查询进行调试时,我可以看到它正在调用:

2015-11-19 16:06:32.327 DEBUG 87081 --- [           main] o.s.data.mongodb.core.MongoTemplate      : findOne using query: { "id" : "528bb0e2e4b0442f1479f1b4"} fields: null for class: class com.ad.josh.domain.Student in collection: Student
2015-11-19 16:06:32.331 DEBUG 87081 --- [ main] o.s.data.mongodb.core.MongoDbUtils : Getting Mongo Database name=[joshdb]
2015-11-19 16:06:32.333 DEBUG 87081 --- [ main] o.s.data.mongodb.core.MongoTemplate : findOne using query: { "_id" : { "$oid" : "528bb0e2e4b0442f1479f1b4"}} in db.collection: josh.Student

通常我可以看到它仍在使用对象 ID 而不是普通字符串进行查询。

我看到了以下建议:

Create a Converter which throws a RuntimeException

但这行不通;它只是抛出一个 RuntimeException。

对于如何使用 Spring Data 访问已将 ID 定义为字符串(在现有数据库中)的 Mongo 数据库,我们将不胜感激。

最佳答案

我认为这里的问题是错误的“_id”格式,这就是为什么 Mongo 无法识别具有此类 id 的任何对象。它应该看起来像 ObjectId("528bb0e2e4b0442f1479f1b4"),而不是普通的 String 类型。

        {
"_id" : ObjectId("528bb0e2e4b0442f1479f1b4"),
"schoolId" : "URDLKYLFJXLWJGR193778316742298",
"surname" : "Lewis",
"admissionNumber" : "0347",
"firstName" : "Martins"
}

因此,如果您已将包含现有数据的 .json 导入到 mongo,则需要更改 id:

"_id": {$oid:"528bb0e2e4b0442f1479f1b4"},

并且应该转换成正确的格式。

希望对大家有所帮助。

关于java - 如何在没有 ObjectId 的情况下将 Mongo 与 Spring Data 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33809010/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com