Spring Boot Mongo findById 返回 null
Posted
技术标签:
【中文标题】Spring Boot Mongo findById 返回 null【英文标题】:Spring Boot Mongo findById returns null 【发布时间】:2019-03-14 10:12:13 【问题描述】:我有一个集合,其中的文档有一个名为 _id
类型为 String
的字段,不是手动生成的。
我一直在尝试使用其 id 获取文档。
val criteria = Criteria.where("_id").`is`("a2z3e44R")
val document = mongoTemplate.findOne(Query.query(criteria), MyDocument::class.java) // returns null
val criteria = Criteria.where("_id").`is`(ObjectId("a2z3e44R"))
val document = mongoTemplate.findOne(Query.query(criteria), MyDocument::class.java) // returns null
val document = mongoTemplate.findById("a2z3e44R", MyDocument::class.java) // returns null
mongoTemplate.findAll(MyDocument::class.java).first myDocument ->
myDocument._id == "a2z3e44R"
// OK...
我的文档是
data class MyDocument(val _id: String, val name: String)
试图通过另一个领域找到一个文档。
知道我可能缺少什么或解决方法吗?
【问题讨论】:
您能否以通过 mongo.exe 或 Robo3T 获取 JSON 文档的方式发布您的 JSON 文档? 【参考方案1】:你应该像这样指明id的类型
public class Article
@MongoId(value = FieldType.OBJECT_ID)
private String id;
private String title;
private String desc;
【讨论】:
这是一个成功的答案【参考方案2】:Ypu 可以在您的存储库中定义:
public interface MyDocumentRepository extends MongoRepository<MyDocument, String>
Pets findBy_id(ObjectId _id);
并使用它:
myDocumentRepository.findBy_id("a2z3e44R");
更多信息see
或
ObjectId objID = new ObjectId("a2z3e44R");
query.addCriteria(Criteria.where("_id").lt(objID));
喜欢这个其他答案link
【讨论】:
此解决方案也不起作用。这是我的初始代码。【参考方案3】:尝试使用注释@Id
标记_id
。 @Id
注解用于指定Spring的标识符。
data class MyDocument(@Id val _id: String, val name: String)
【讨论】:
我使用import org.springframework.data.annotation.Id
实施了您的建议,但结果保持不变。
如何持久化新数据?
这是另一个负责添加数据的程序。我只是在阅读它们。以上是关于Spring Boot Mongo findById 返回 null的主要内容,如果未能解决你的问题,请参考以下文章
使用 Mongo 模板在 Spring Boot 中过滤内部 Arraylist 项的 Mongo 查询
Spring Boot 连接到运行的 mongo 容器的 MongoDB 副本集