问题 mongodb中的查询语法为sql“喜欢” - 我正在使用java


基本上这是我的问题: 如何用“喜欢”查询MongoDB?

但我想这里的所有答案都适用于你使用mongodb shell命令行,那么它的等价物是什么 db.users.find({"name": /.*m.*/}) 当我们使用java时。

这是我想要做的

  DBCollection coll = MongoDBUtil.getDB().getCollection("post_details");      
    BasicDBObject query = new BasicDBObject();      
    query.put("price", new BasicDBObject("$gt", 5).append("$lt", 8));
    /*what should i write instead of this line*/ 
            query.put("title", "/.*m.*/");

    DBCursor cur = coll.find(query);

6335
2018-05-09 13:47


起源



答案:


对于此问题,您应该使用正则表达式,如下例所示:

BasicDBObject query = new BasicDBObject();
Pattern regex = Pattern.compile("the title you are looking for"); // should be m in your case
query.put("title", regex);

13
2018-05-09 13:52



日Thnx。你的意思是我应该写:Pattern regex = Pattern.compile(“/.* m。* /”);如果我想找到包含“m”的标题? - MoienGK
@dave你可以简单地写出Pattern regex = Pattern.compile(“m”); - sebastian
+1 - 请注意,如果可能的话,MongoDB将“做正确的事”并使用正则表达式执行高效搜索(基本上当正则表达式只在末尾有通配符时) - Sean Reilly
使用模式让它变得如此简单!我可以使用模式而不是像这样的东西:query.put(“price”,new BasicDBObject(“$ gt”,5).append(“$ lt”,8));我变得贪得无厌:D - MoienGK
@dave:可能不是:-(。即使您描述的查询确实有效,MongoDB也无法使用索引来解决它,因此它可能会使查询更慢.IMO最好限制正则表达式的使用在SQL查询中使用LIKE子句的地方。 - Sean Reilly


答案:


对于此问题,您应该使用正则表达式,如下例所示:

BasicDBObject query = new BasicDBObject();
Pattern regex = Pattern.compile("the title you are looking for"); // should be m in your case
query.put("title", regex);

13
2018-05-09 13:52



日Thnx。你的意思是我应该写:Pattern regex = Pattern.compile(“/.* m。* /”);如果我想找到包含“m”的标题? - MoienGK
@dave你可以简单地写出Pattern regex = Pattern.compile(“m”); - sebastian
+1 - 请注意,如果可能的话,MongoDB将“做正确的事”并使用正则表达式执行高效搜索(基本上当正则表达式只在末尾有通配符时) - Sean Reilly
使用模式让它变得如此简单!我可以使用模式而不是像这样的东西:query.put(“price”,new BasicDBObject(“$ gt”,5).append(“$ lt”,8));我变得贪得无厌:D - MoienGK
@dave:可能不是:-(。即使您描述的查询确实有效,MongoDB也无法使用索引来解决它,因此它可能会使查询更慢.IMO最好限制正则表达式的使用在SQL查询中使用LIKE子句的地方。 - Sean Reilly


以上面的示例为参考,但使用Filters类:

Pattern regex = Pattern.compile("title you look for");
Bson filter = Filters.eq("nombre", regex));

0
2018-06-23 21:12