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

Java + Mongo +Morphia - Finding Regex Expression in mongo array

我有一个 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. jmkgreen fork 真的很老了。我肯定会尝试进入正式的 MongoDB Morphia 版本,其中包含许多错误修复和新功能。

  2. 这...会...会...慢...
    除非集合真的很小,否则您很快就会感受到这种痛苦。如果您无法规范化数据(在 @PrePersist 中调用 .toLowerCase()),我会将数据复制为 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();