gpt4 book ai didi

java - 带有 ObjectID 的 Spring Data Mongo 自定义存储库查询

转载 作者:IT老高 更新时间:2023-10-28 13:35:23 26 4
gpt4 key购买 nike

我有一个要实现为 Spring Mongo 存储库的 mongo 查询

db.collection.find({ 'items': 
{ $elemMatch: {
'refund.$id' : ObjectId('5638cab2e4b07ff212618d7e')
}
}
})

我的仓库界面是

@Query("{ 'items': { $elemMatch: { 'refund.$id' :  ObjectId(?0) } } }")
RMA findRMAByItemRefund(String refundId);

它抛出 JSONParseException

Caused by: com.mongodb.util.JSONParseException: 
{ 'items': { $elemMatch: { 'refund.$id' : ObjectId("_param_0") } } }
^
at com.mongodb.util.JSONParser.parse(JSON.java:216)

最佳答案

由于接受的解决方案在我的案例中没有产生任何结果,我不得不找到另一个解决方案,即:

我没有使用通过 @Query(...) 定义的自动生成查询功能,而是选择手动构建用于查询 mongo 的 DBObject,并将功能定义为接口(interface)中的 default 实现,从而使其保持“干净”(" - 因为必须引入 _query 方法)

注意:此解决方案仅适用于 Java 1.8+

public interface SomeRepository extends MongoRepository<SomeEntity, String> {

@Query("{'nestedEntity._id': ?0}")
SomeEntity findByNestedEntityId_DoesntWork(String nestedEntityId);

@Query("?0")
SomeEntity _query(DBObject query);

default SomeEntity findByNestedEntityId(String nestedEntityId) {
DBObject queryObject = BasicDBObjectBuilder
.start("nestedEntity._id", new ObjectId(nestedEntityId))
.get();

return this._query(queryObject);
}
}

关于java - 带有 ObjectID 的 Spring Data Mongo 自定义存储库查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33805567/

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