我正试图在数据库中查找字符串。这些字符串包含contains、startswith和endswith的通配符;否则,我只搜索确切的值。我看过很多用java进行搜索的例子,但它们似乎都与当前的java驱动程序一起过时了,并且使用了BasicDB对象,我无法使用它们。我相信下面的代码会起作用我只需要知道如何更改一些字符串来搜索数据库:
假设我的数据库看起来像这个
{State:Ohio}
{State:Iowa}
{State:Texas}
containsString:返回包含它的任何文档。即"io"将返回俄亥俄州和爱荷华州的文档
beginString:返回以它开头的任何文档。即"io"将返回Iowa文档
endString:返回以它结尾的任何文档。即"io"将返回俄亥俄州文档
否则它将查找确切的值。即"德克萨斯州"将退回德克萨斯州文件
MongoDatabase db = mongoClient.getDatabase("database1");
MongoCollection collection = db.getCollection("collection1");
BasicDBList list = new BasicDBList();
for(int i=0; i < data.length; i++){
String[] queries = data[i].split(":", 2);
String column = queries[0];
String query = queries[1];
if (query.startsWith("*") && query.endsWith("*")) {
String containsString = query.replace("*", "");
MongoCursor<Document> cursor = collection.find(new Document(column, containsString)).iterator();
while (cursor.hasNext()) {
list.add(cursor.next());
}
} else if (query.startsWith("*")) {
String beginString = query.replace("*", "");
MongoCursor<Document> cursor = collecton.find(new Document(column, beginString)).iterator();
while (cursor.hasNext()) {
list.add(cursor.next());
}
} else if (query.endsWith("*")) {
String endString = query.replace("*", "");
MongoCursor<Document> cursor = collection.find(new Document(column, endString)).iterator();
while (cursor.hasNext()) {
list.add(cursor.next());
}
} else {
MongoCursor<Document> cursor = collection.find(new Document(column, query)).iterator();
while (cursor.hasNext()) {
list.add(cursor.next());
}
}
}
所以我想我可能需要为此做regex,但我不知道如何使用java驱动程序。然而,我现在发现java驱动程序有过滤器(更多关于它们的文档)。所以我想这已经变成了一个如何将字符串转换为正则表达式的问题。
所以,在学习了一些正则表达式的方法之后,这就是我所做的。
对于包含
Pattern pattern = Pattern.compile(".*"+Pattern.quote(anyString)+".*", Pattern.CASE_INSENSITIVE);
MongoCursor<Document> cursor = collecton.find(regex(column, pattern)).iterator();
用于启动
Pattern pattern = Pattern.compile("^"+Pattern.quote(beginString), Pattern.CASE_INSENSITIVE);
MongoCursor<Document> cursor = collection.find(regex(column, pattern)).iterator();
对于带有的末端
Pattern pattern = Pattern.compile(Pattern.quote(endString)+"$", Pattern.CASE_INSENSITIVE);
MongoCursor<Document> cursor = collection.find(regex(column, pattern)).iterator();
对于准确的
Pattern pattern = Pattern.compile("(?i)(?<=\s|^)"+Pattern.quote(query)+"(?=\s|$)", Pattern.CASE_INSENSITIVE);
MongoCursor<Document> cursor = collection.find(regex(queryCol, pattern)).iterator();