我试图在我的数据库中查找字符串。这些字符串包含contains,startswith和endswith的通配符;否则我只是搜索确切的值。我已经查看了许多使用java进行搜索的示例,但它们似乎都已经过时了当前的java驱动程序并使用了我无法工作的BasicDBobjects。我相信下面的代码会起作用 我只需要知道如何更改某些字符串以搜索数据库:
我们说我的数据库看起来像这样
{State:Ohio}
{State:Iowa}
{State:Texas}
containsString:返回包含它的任何文档。即" io"将返回俄亥俄州和爱荷华州的文件
beginString:返回以它开头的所有文档。即" io"会重新调整爱荷华州的文件
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());
}
}
}
答案 0 :(得分:3)
所以我想我可能要为此做正则表达式,但我不知道如何使用java驱动程序。但是,我现在发现java驱动程序有filters(更多documentation)。所以我想这现在变成了如何将我的字符串转换为正则表达式问题。
所以在学习了正则表达式后,这就是我所做的。
For contains
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();
for endswith
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();