【问题标题】:Spring Data Mongodb find by starts withSpring Data Mongodb find by 开头
【发布时间】:2014-04-08 15:56:55
【问题描述】:

我在 mongodb 中使用 Spring 数据。 我有一个名为 place 的集合:

{ 
  "_id" : NumberLong(281469), 
  "_class" : "com.domain.Place", 
  "name" : "paris"
}

我想找到以一些字符串开头的地方。 在 mongo 控制台中,我可以使用:

db.place.find({name : {$regex : /^par/, $options: 'i'}})

我尝试过使用 spring 数据存储库,但总是给出一个空结果:

@Query(value="{'name' : {$regex : ?0, $options: 'i'}}")
public Page<PlaceDetails> findByNameStartsWith(String name,Pageable pageable);

在存储库方法的调用中,我以这种方式进行连接:

repository.findByNameStartsWith("/^"+token+"/",new PageRequest(0,10));

虽然此存储库方法有效:

@Query(value="{'name' : ?0}")
public Page<PlaceDetails> findByName(String name,Pageable pageable);

类是这样声明的:

@Document(collection="place")
public class PlaceDetails {
//...
}

知道为什么它不起作用吗?

【问题讨论】:

    标签: mongodb spring-data


    【解决方案1】:

    StartsWith 自动将必要的包装应用到正则表达式中,因此使用您的客户端代码,您可以有效地将其包装两次。如果您考虑一下:使​​用您的方法,客户实际上必须知道starts-with 子句是使用正则表达式实现的,这将泄漏内部。

    这么简单:

    repository.findByNameStartsWith(token, new PageRequest(0,10));
    

    应该可以解决问题。

    【讨论】:

      猜你喜欢
      • 2017-08-06
      • 1970-01-01
      • 1970-01-01
      • 2020-05-06
      • 2022-12-26
      • 1970-01-01
      • 2021-01-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多