目前我正在使用java连接到MONGODB, 我想使用java驱动程序在mongodb中编写这个sql查询:
select * from tableA where name like("%ab%")
是他们通过java执行相同任务的任何解决方案, 我知道mongodb中的查询非常简单,查询是
db.collection.find({name:/ab/})
但是如何在java中执行相同的任务
当前我使用模式匹配来执行任务,代码是
DBObject A = QueryBuilder.start("name").is(Pattern.compile("ab",
Pattern.CASE_INSENSITIVE)).get();
但它认为查询速度很慢我认为,是否存在不使用模式匹配的解决方案?
答案 0 :(得分:1)
可以使用正则表达式。看看以下内容:
http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-RegularExpressions
确保您了解潜在的性能影响!
答案 1 :(得分:0)
为什么你害怕正则表达式?编译表达式后,它们非常快,如果表达式为“ab”,则结果类似于搜索字符串中子字符串的函数。
然而,为了做你需要的事,你有两种可能:
$where
queries。使用$where
个查询,您可以指定类似
db.foo.find({"$where" : "this.x + this.y == 10"})
db.foo.find({"$where" : "function() { return this.x + this.y == 10; }"})
因此您可以在字符串字段上使用JavaScript .indexOf()
。
答案 2 :(得分:0)
代码snippet使用 $regex
条款(如 mikeycgto 所述)
String searchString = "ab";
DBCollection coll = db.getCollection("yourCollection");
query.put("name",
new BasicDBObject("$regex", String.format(".*((?i)%s).*", searchString)) );
DBCursor cur = coll.find(query);
while (cur.hasNext()) {
DBObject dbObj = cur.next();
// your code to read the DBObject ..
}
只要您不打开和关闭每个方法调用的连接,查询就应该很快。
答案 3 :(得分:0)
DBObject A = QueryBuilder.start("name").is(Pattern.compile("ab",
Pattern.CASE_INSENSITIVE)).get();
我认为这是可能的解决方案之一,您需要创建索引来实现这些目标。