无法使用参数查询mongo存储库

时间:2018-10-27 16:52:58

标签: spring-data-mongodb

我正在尝试从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进行硬编码,则会得到想要的结果。

此外,当我调试它时,我看到了param,但是周围有双引号吗? enter image description here

蒙哥罗盘的截图

enter image description here

2 个答案:

答案 0 :(得分:0)

在MongoUI中,您应该检查字段ID的数据类型。它是ObjectId而不是String,因此您需要在存储库方法中传递org.bson.types.ObjectId而不是String。

 List<Offer> findByDetailsBuyerId(ObjectId buyerId);

答案 1 :(得分:0)

答案

@Query("{ 'details.buyerId' : ?0 }")
List<OfferOverview> findOffersByDetailsBuyerId(String buyerId);

但是我的主要问题是传递带有双引号的buyerId。