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

标签 java mongodb

我正在尝试在我的数据库中查找字符串。这些字符串包含包含、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/

相关文章:

Mongodb设置唯一字段

Java 使用 if else 语句的方法返回值

java - 我不明白输出这段代码。 ( map )

java - 如何在 Spring 中 Autowiring 构造函数和属性

node.js - 如何在 MongoDB 中按日期对集合进行排序?

mongodb - 无法读取证书文件 :/root/ssl/mongodb. pem MongoDB SSL 问题

java - 突然maven无法编译

java - libGdx:为网格着色

java - Spring聚合框架: How to create nested $divide, $subtract,$mod查询?

mongodb - 未指定错误 DATABASE_URI,回退到本地主机。在端口 1337 上运行的解析服务器示例