我有一个集合,文档中的字段名为_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...
MyDocument是
data class MyDocument(val _id: String, val name: String)
尝试通过其他字段查找文档。
关于我可能会丢失的内容或解决方法的想法?
答案 0 :(得分:0)
尝试用注释_id
标记@Id
。 @Id
批注用于指定Spring的标识符。
data class MyDocument(@Id val _id: String, val name: String)
答案 1 :(得分:0)
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
答案 2 :(得分:0)
您应该这样指定ID的类型
public class Article {
@MongoId(value = FieldType.OBJECT_ID)
private String id;
private String title;
private String desc;
}