Spring Data Mongodb从一开始就找到了

时间:2014-04-08 15:56:56

标签: mongodb spring-data

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

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

我想从一些String开始。 在mongo控制台中,我可以使用:

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

使用弹簧数据存储库我已经尝试了这个但总是给出一个空结果:

@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 {
//...
}

知道它为什么不起作用?

1 个答案:

答案 0 :(得分:5)

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

这么简单:

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

应该这样做。