我正在尝试在我的数据库中查找字符串。这些字符串包含包含、startswith 和endswith 的通配符;否则我只是搜索确切的值。我看过许多使用 java 进行搜索的示例,但它们似乎都已经过时了当前的 java 驱动程序,并且使用了我无法工作的 BasicDBobjects。我相信下面的代码会起作用 我只需要知道如何更改一些字符串来搜索数据库:
假设我的数据库如下所示
{State:Ohio}
{State:Iowa}
{State:Texas}
containsString:返回包含它的任何文档。即“io”将返回俄亥俄州和爱荷华州文档
beginString:返回以其开头的任何文档。即“io”将重新调整爱荷华州文档
endString:返回以其结尾的所有文档。即“io”将返回俄亥俄州文档
否则它将寻找确切的值。即“texas”将返回德克萨斯州文档
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());
}
}
}
最佳答案
所以我想我可能必须为此做正则表达式,但我不知道如何使用java驱动程序。但是,我现在发现java驱动程序有filters (更多 documentation 关于它们)。所以我想这现在已经变成了如何将字符串转换为正则表达式的问题。
在学习了一些正则表达式之后,这就是我所做的。
对于包含
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();
关于java - Mongodb 使用 java 驱动程序查找包含、开头、结尾和精确字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37120845/