我正在尝试用mongo + java中的$ regex编写$ in查询。它从mongo shell工作正常,我得到了结果:
db.getCollection('collection').find({ "_id" : { "$in" : [ /^1332444344/]}})
然而,当我尝试从我的Java应用程序执行时,我没有得到任何结果:
DBCollection collection = db.getCollection("collection");
BasicDBObject query = new BasicDBObject();
inQuery.put("_id", new BasicDBObject("$in", input));
DBCursor cursor = collection.find(query);
// This returns no results
// Query: { "_id" : { "$in" : [ { "$regex" : "/^1332444344/"} ] }}
input = Lists.newArrayList(Pattern.compile("/^1332444344/"));
// The following as well returned nothing
// Query: { "_id" : { "$in" : [ "/^1332444344/" ] }}
input = Lists.newArrayList("/^1332444344/"));
Java代码在正则表达式周围添加双引号,这似乎导致了这个问题。
我也试过以下但得到了一个json解析异常:
BasicQuery bq = new BasicQuery("{ \"_id\" : { \"$in\" : [ /^1332444344/ ]}}")
此问题是否有解决方法?
由于
答案 0 :(得分:0)
我认为/
导致了这个问题。/
在字符串开头(^
)之前,您不能拥有/
。
Java并没有像其他语言一样使用"
来表示正则表达式的开头和结尾。它使用/
来标记开始和结束,因为正则表达式与任何其他字符串一样。
删除error: { message: '(#100) Unsupported attachment type',
type: 'OAuthException',
code: 100,
error_subcode: 2018046,
fbtrace_id: 'CObB3+0fgMw' }
,至少在正则表达式的开头;您可能也想删除最后的那个(取决于您实际上想要匹配的内容)。