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

这个问题与另一篇文章非常相似 我基本上想要使用mongodb版本的sql“like”'%m%'运算符 但在我的情况下,我正在使用java api for mongodb,而另一篇文章是使用mongodb shell 我尝试了在另一个帖子中发布的内容并且工作正常
db.users.find({"name": /m/})
但在java中,我在BasicDBObject上使用put方法并将其传递给DBCollections对象上的find()方法
BasicDBObject q = new BasicDBOBject();
q.put("name", "/"+m+"/");
dbc.find(q);
但这似乎没有用。 谁有任何想法?     
已邀请:
您需要传递Java RegEx的实例(java.util.regex.Pattern):
BasicDBObject q = new BasicDBObject();
q.put("name",  java.util.regex.Pattern.compile(m));
dbc.find(q);
这将在发送到服务器时转换为MongoDB正则表达式,以及任何RegEx标志。     
使其不区分大小写:
Document doc = new Document("name", Pattern.compile(keyword, Pattern.CASE_INSENSITIVE));
collection.find(doc);
    
您必须首先引用您的文本,然后使用编译来获取正则表达式:
q.put("name",  Pattern.compile(Pattern.quote(m)));
不使用
java.util.Pattern.quote()
,某些字符不会被转义。 例如使用
?
作为
m
参数将引发异常。     
在spring数据mongodb中,这可以这样做:
Query query = new Query();
query.limit(10);        
query.addCriteria(Criteria.where("tagName").regex(tagName));
mongoOperation.find(query, Tags.class);
    
Document doc = new Document("name", Pattern.compile(keyword));
collection.find(doc);
    
可能不是真正的答案,(直接执行终端查询)
public void displayDetails() {
    try {
        // DB db = roleDao.returnDB();
        MongoClient mongoClient = new MongoClient("localhost", 5000);
        DB db = mongoClient.getDB("test");
        db.eval("db.test.update({'id':{'$not':{'$in':[/su/]}}},{$set:{'test':'test3'}},true,true)", new Object[] {});
        System.out.println("inserted  ");

    } catch (Exception e) {
        System.out.println(e);
    }
}
    

要回复问题请先登录注册