无法使用参数查询 mongo 存储库
Not able to query mongo repository with parameter
我正在尝试从 mongodb
查询以下对象
[
{
"id": "6b3a9814c1990a0578988d9e",
"details": {
"buyerId": "5bd450ed0307fa0a3a904376",
"offerId": "1",
"productId": "5b3a9814c1880a0578988d6a",
"productTitle": "Watch",
"amount": 50,
"status": "Open",
}
}
]
我正在使用 spring-boot-starter-data-mongodb 所以首先,我尝试了标准方式。
这是我的 存储库 ,
中的内容
public interface OfferRepository extends MongoRepository<Offer, String> {
List<Offer> findOffersByDetailsBuyerId(String buyerId);
}
我也试过 自定义查询,
@Query(value = "{'details.buyerId' : ?0 }")
List<Offer> findOfferByDetails_BuyerId(@Param("buyerId") String buyerId);
两者都返回一个空数组。但是,如果我在查询中对 buyerId 进行硬编码,我会得到我想要的结果。
此外,当我调试它时,我看到了参数但它周围有双引号?
来自 mongo 指南针的屏幕截图
在 MongoUI 中,您应该检查字段 ID 的数据类型。它是 ObjectId
而不是 String
因此您需要在存储库方法中传递 org.bson.types.ObjectId
而不是 String。
List<Offer> findByDetailsBuyerId(ObjectId buyerId);
回答
@Query("{ 'details.buyerId' : ?0 }")
List<OfferOverview> findOffersByDetailsBuyerId(String buyerId);
但我的主要问题是使用 双引号 传递 buyerId。
我正在尝试从 mongodb
查询以下对象[
{
"id": "6b3a9814c1990a0578988d9e",
"details": {
"buyerId": "5bd450ed0307fa0a3a904376",
"offerId": "1",
"productId": "5b3a9814c1880a0578988d6a",
"productTitle": "Watch",
"amount": 50,
"status": "Open",
}
}
]
我正在使用 spring-boot-starter-data-mongodb 所以首先,我尝试了标准方式。
这是我的 存储库 ,
中的内容public interface OfferRepository extends MongoRepository<Offer, String> {
List<Offer> findOffersByDetailsBuyerId(String buyerId);
}
我也试过 自定义查询,
@Query(value = "{'details.buyerId' : ?0 }")
List<Offer> findOfferByDetails_BuyerId(@Param("buyerId") String buyerId);
两者都返回一个空数组。但是,如果我在查询中对 buyerId 进行硬编码,我会得到我想要的结果。
此外,当我调试它时,我看到了参数但它周围有双引号?
来自 mongo 指南针的屏幕截图
在 MongoUI 中,您应该检查字段 ID 的数据类型。它是 ObjectId
而不是 String
因此您需要在存储库方法中传递 org.bson.types.ObjectId
而不是 String。
List<Offer> findByDetailsBuyerId(ObjectId buyerId);
回答
@Query("{ 'details.buyerId' : ?0 }")
List<OfferOverview> findOffersByDetailsBuyerId(String buyerId);
但我的主要问题是使用 双引号 传递 buyerId。