我有一个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();
答案 0 :(得分:1)
jmkgreen分叉很老了。我绝对会尝试使用官方的MongoDB Morphia版本,其中包含许多错误修正和新功能。
这......将... ......慢......
除非收藏品非常小,否则你很快就会感受到这种痛苦。如果您无法规范化数据(在.toLowerCase()
上调用@PrePersist
),我会将数据复制到courseCallNoNormalized
之类的内容中。因此,您可以使用完全匹配,最好使用索引。
您是否尝试过以下操作?
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();