My Sites


Wednesday, November 4, 2015

Use the $in Operator with a Regular Expression + Mongo + Java + Morphia

https://docs.mongodb.org/v3.0/reference/operator/query/in/
The $in operator can specify matching values using regular expressions of the form /pattern/. You cannot use $regex operator expressions inside an $in.

Perform Case-Insensitive Regular Expression Match
https://docs.mongodb.org/manual/reference/operator/query/regex/#perform-case-insensitive-regular-expression-match

Example :-
db.Course.find( { $and: [{callNo: {$in : ["testcourse"]} },{myId :123456 }]})
db.Course.find( { $and: [{callNo: {$in : [/^testcourse$/i]} },{myId :123456 }]})

jmkgreen/morphia (MongoDB object-document mapper in Java. Uses mongo-java-driver. )
https://github.com/jmkgreen/morphia/blob/master/morphia/src/main/java/com/github/jmkgreen/morphia/query/Query.java

Pattern regexDbObject = Pattern.compile("^" + originalCourseCallNo + "$", Pattern.CASE_INSENSITIVE);
mongoDatastore.find(EmployeeEntity.class).filter("email", regexp).get();

List<Pattern> courseCallNoList = new ArrayList<Pattern>();courseCallNoList.add(regexDbObject); 
List<Course>  courses= getDataStore().createQuery(Course.class).field
(Constants.Course.COURSE_CALL_NO).in(courseCallNoList).field
(Constants.Course.CLIENT_ID).equal(clientId).field
(Constants.Course.COURSE_CALL_NO_EXPIRATION_DATE).greaterThanOrEq(courseCallNoExpDate).asList();


http://www.tutorialspoint.com/java/java_regular_expressions.htm

1 comment: