Mongodb使用java驱动程序查找包含,开头,结尾和精确字符串

时间:2016-05-09 16:27:12

标签: java mongodb

我试图在我的数据库中查找字符串。这些字符串包含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());
       }
     }
}

1 个答案:

答案 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();