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();
jmkgreen fork 真的很老了。我肯定会尝试进入正式的 MongoDB Morphia 版本,其中包含许多错误修复和新功能。
这...会...会...慢...
除非集合真的很小,否则您很快就会感受到这种痛苦。如果您无法规范化数据(在 @PrePersist
中调用 .toLowerCase()
),我会将数据复制为 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();
我有一个 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();
jmkgreen fork 真的很老了。我肯定会尝试进入正式的 MongoDB Morphia 版本,其中包含许多错误修复和新功能。
这...会...会...慢...
除非集合真的很小,否则您很快就会感受到这种痛苦。如果您无法规范化数据(在@PrePersist
中调用.toLowerCase()
),我会将数据复制为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();