Java 当 id 为字符串时,mongoTemplate findOne 查询不返回结果
Java mongoTemplate findOne query not returning results when id is String
我有以下查询使用 mongoTemplate 查找 MongoDB 文档。
当我使用 Id 搜索我的目标时,这没有返回任何结果。
Query query = new Query(Criteria.where("id").is(String.valueOf(targetId)));
mongoTemplate.findOne(query, Target.class));
但是当我使用 Id 以外的任何字段时,查询有效。有人可以帮助我使用 Id 来解决这个问题吗?
目标class
@Data
@Document
public class Target {
@Id
private String id;
/**
* Name of the target
*/
private String name;
}
数据库文件。
{
"_id" : "5290d748e4",
"name" : "Test Target"
}
按名称查询工作正常。
Query query = new Query(Criteria.where("name").is("Test Target"));
mongoTemplate.findOne(query, Target.class));
根据讨论 here,这似乎无法实现。您需要将数据库中的类型更改为 ObjectId
。
如果你做不到,你可以做
mongoTemplate.getCollection("target").findOne(<targetId>)
但这会 return 一个 DBObject
,你需要从这个
创建 Target 实例
我能够通过使用 MongoCollection
获得所需的功能。
MongoDatabase mongoDatabase = mongoTemplate.getDb();
MongoCollection<Document> targetCollection
= mongoDatabase.getCollection(mongoTemplate.getCollectionName(Target.class));
Document query = new Document();
query.put("_id", parkTargetId);
query.put("spots._id", parkingSpotId);
targetCollection.find(query);
我有以下查询使用 mongoTemplate 查找 MongoDB 文档。 当我使用 Id 搜索我的目标时,这没有返回任何结果。
Query query = new Query(Criteria.where("id").is(String.valueOf(targetId)));
mongoTemplate.findOne(query, Target.class));
但是当我使用 Id 以外的任何字段时,查询有效。有人可以帮助我使用 Id 来解决这个问题吗?
目标class
@Data
@Document
public class Target {
@Id
private String id;
/**
* Name of the target
*/
private String name;
}
数据库文件。
{
"_id" : "5290d748e4",
"name" : "Test Target"
}
按名称查询工作正常。
Query query = new Query(Criteria.where("name").is("Test Target"));
mongoTemplate.findOne(query, Target.class));
根据讨论 here,这似乎无法实现。您需要将数据库中的类型更改为 ObjectId
。
如果你做不到,你可以做
mongoTemplate.getCollection("target").findOne(<targetId>)
但这会 return 一个 DBObject
,你需要从这个
我能够通过使用 MongoCollection
获得所需的功能。
MongoDatabase mongoDatabase = mongoTemplate.getDb();
MongoCollection<Document> targetCollection
= mongoDatabase.getCollection(mongoTemplate.getCollectionName(Target.class));
Document query = new Document();
query.put("_id", parkTargetId);
query.put("spots._id", parkingSpotId);
targetCollection.find(query);