我使用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 {
//...
}
知道它为什么不起作用?
答案 0 :(得分:5)
StartsWith
会自动将必要的包装应用到正则表达式中,因此使用您的客户端代码可以有效地将其包装两次。如果您考虑一下:使用您的方法,客户端必须知道starts-with子句是使用正则表达式实现的,这将是泄漏的内部。
这么简单:
repository.findByNameStartsWith(token, new PageRequest(0,10));
应该这样做。