如何使用java api查询带有“like”的mongodb?

2022-09-01 09:21:18

这个问题与另一篇文章非常相似

我基本上想使用mongodb版本的sql“like”'%m%'运算符

但是在我的情况下,我正在使用mongodb的java api,而另一个帖子正在使用mongodb shell。

我尝试了其他线程中发布的内容,它工作正常

db.users.find({"name": /m/})

但是在java中,我在BasicDBObject上使用put方法,并将其传递到DBCollections对象上的find()方法中

BasicDBObject q = new BasicDBOBject();
q.put("name", "/"+m+"/");
dbc.find(q);

但这似乎不起作用。

有人有什么想法吗?


答案 1

您需要传递 Java 正则表达式 (java.util.regex.Pattern) 的实例:

BasicDBObject q = new BasicDBObject();
q.put("name",  java.util.regex.Pattern.compile(m));
dbc.find(q);

当它发送到服务器时,它将转换为MongoDB正则表达式,以及任何正则表达式标志。


答案 2

您必须首先引用文本,然后使用编译来获取正则表达式:

q.put("name",  Pattern.compile(Pattern.quote(m)));

如果不使用 java.util.Pattern.quote(),某些字符不会被转义。

例如,使用作为参数将引发异常。?m