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