mongodb java $in query with $regex
java, mongodb, regex
Solution
The behavior you're seeing might be a bug, however as an alternative you can write your query like this
Pattern pattern = Pattern.compile("(^aaa$)|(^bbb$)");
srchTermQuery.append("businesses", pattern);
Not pretty but it seem to do the trick
Problem
I am trying to write `$in` query with `$regex` in mongo+java. It's not working in mongo shell either. What I mean is I don't get any results but no query parse error either. Here's the final query I got from Java Debugger at the line where I say `collection.find(finalQuery)` ``` {"$and": [ {"$or": [ {"country": "united states"} ]}, {"businesses": { "$in": [ {"$regex": "^.*cardinal.*health.*$"}, {"$regex": "^.*the.*hartford.*$"} ] }} ]} ``` Java Code snipet for Above query: ``` Set<Pattern> businesses = new HashSet<Pattern>(); for(String st: srchTerms) { businesses.add(Pattern.compile("^"+st.trim()+"$")); } srchTermQuery.append("businesses", new BasicDBObject("$in", businesses)); ``` However, following query works in mongo shell but I don't know how to write it into java: ``` {"registering_organization": { "$in": [ /^.*cardinal.*health.*$/, /^.*the.*hartford.*$/ ] }} ``` Java Code add double quotes around regex if we try to define it as a string.