Java + Mongo + Morphia - 在mongo数组中查找正则表达式

时间:2015-11-04 06:55:46

标签: java regex mongodb morphia

我有一个mongo查询如下。

db.Course.find( { $and: [{courseCallNo: {$in : [/^ssoapicall1$/i]} }, {clientId :123456 } ] })

在我的java程序中,我使用jmkgreen/morphia作为我的mongo库。我需要使用java获得上面的完全匹配。 以下是我的代码。请帮我解决这个问题。感谢。

PS:我想问题是,我正在使用字符串数组。我需要使用正则表达式创建数组。

 String courseCallNoRegex = "/^"+originalCourseCallNo+"$/i";        
    List<String> courseCallNoList = new ArrayList<String>();
    courseCallNoList.add(courseCallNoRegex);    
    courseCallNoList.add(courseCallNoRegex);    
    List<Course>  courses= getDataStore().createQuery(Course.class).field(Constants.Course.COURSE_CALL_NO).in(courseCallNoList).field(Constants.Course.CLIENT_ID).equal(clientId).asList();

1 个答案:

答案 0 :(得分:1)

  1. jmkgreen分叉很老了。我绝对会尝试使用官方的MongoDB Morphia版本,其中包含许多错误修正和新功能。

  2. 这......将... ......慢......
    除非收藏品非常小,否则你很快就会感受到这种痛苦。如果您无法规范化数据(在.toLowerCase()上调用@PrePersist),我会将数据复制到courseCallNoNormalized之类的内容中。因此,您可以使用完全匹配,最好使用索引。

  3. 您是否尝试过以下操作?

    Pattern regexp =
       Pattern.compile("^" + originalCourseCallNo + "$", Pattern.CASE_INSENSITIVE);
    mongoDatastore.find(Course.class)
       .field(Constants.Course.CLIENT_ID).equal(clientId)
       .filter(Constants.Course.COURSE_CALL_NO, regexp).asList();