Mongodb find包含、StartWith、endswith和带有java驱动程序的精确字符串

Mongodb find包含、StartWith、endswith和带有java驱动程序的精确字符串,java,mongodb,Java,Mongodb,我正试图在数据库中查找字符串。这些字符串包含contains、startswith和endswith的通配符;否则我只搜索精确的值。我看过很多用java进行搜索的例子,但它们似乎都已经过时了,用的是当前的java驱动程序,使用的是我无法使用的BasicDBObject。我相信下面的代码会起作用 我只需要知道如何更改某些字符串以搜索数据库: 假设我的数据库是这样的 {State:Ohio} {State:Iowa} {State:Texas} containssString:返回包含它的任何文档

我正试图在数据库中查找字符串。这些字符串包含contains、startswith和endswith的通配符;否则我只搜索精确的值。我看过很多用java进行搜索的例子,但它们似乎都已经过时了,用的是当前的java驱动程序,使用的是我无法使用的BasicDBObject。我相信下面的代码会起作用 我只需要知道如何更改某些字符串以搜索数据库:

假设我的数据库是这样的

{State:Ohio}
{State:Iowa}
{State:Texas}
containssString:返回包含它的任何文档。ie“io”将返回俄亥俄州和爱荷华州的文件

beginString:返回以它开头的所有文档。ie“io”将重新发布爱荷华州文件

endString:返回以它结尾的所有文档。ie“io”将返回文件

否则它将查找确切的值。ie“texas”将返回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());
       }
     }
}
MongoDatabase db=mongoClient.getDatabase(“database1”);
MongoCollection collection=db.getCollection(“collection1”);
BasicDBList=新的BasicDBList();
对于(int i=0;i
所以我想我可能需要使用正则表达式,但我不知道如何使用java驱动程序。但是,我现在发现java驱动程序有(更多关于它们的内容)。所以我想这已经变成了一个如何将字符串转换成正则表达式的问题

所以在学习了一些正则表达式的方法之后,这就是我所做的

对于包含

Pattern pattern = Pattern.compile(".*"+Pattern.quote(anyString)+".*", Pattern.CASE_INSENSITIVE);
MongoCursor<Document> cursor = collecton.find(regex(column, pattern)).iterator();
Pattern=Pattern.compile(“.*”+Pattern.quote(anyString)+“*”,Pattern.CASE不区分大小写);
MongoCursor=collecton.find(regex(column,pattern)).iterator();
对于startswith

Pattern pattern = Pattern.compile("^"+Pattern.quote(beginString), Pattern.CASE_INSENSITIVE);
MongoCursor<Document> cursor = collection.find(regex(column, pattern)).iterator();
Pattern=Pattern.compile(“^”+Pattern.quote(beginString),Pattern.CASE不区分大小写);
MongoCursor=collection.find(regex(column,pattern)).iterator();
对于endswith

Pattern pattern = Pattern.compile(Pattern.quote(endString)+"$", Pattern.CASE_INSENSITIVE);
MongoCursor<Document> cursor = collection.find(regex(column, pattern)).iterator();
Pattern=Pattern.compile(Pattern.quote(endString)+“$”,Pattern.CASE不区分大小写);
MongoCursor=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();

Pattern-Pattern=Pattern.compile((?i)(?),所以我想我可能必须为此做正则表达式,但我不知道如何使用java驱动程序。然而,我现在发现java驱动程序有(更多关于它们的内容)。所以我想这现在变成了一个如何将字符串转换为正则表达式的问题

所以在学习了一些正则表达式的方法之后,这就是我所做的

对于包含

Pattern pattern = Pattern.compile(".*"+Pattern.quote(anyString)+".*", Pattern.CASE_INSENSITIVE);
MongoCursor<Document> cursor = collecton.find(regex(column, pattern)).iterator();
Pattern=Pattern.compile(“.*”+Pattern.quote(anyString)+“*”,Pattern.CASE不区分大小写);
MongoCursor=collecton.find(regex(column,pattern)).iterator();
对于startswith

Pattern pattern = Pattern.compile("^"+Pattern.quote(beginString), Pattern.CASE_INSENSITIVE);
MongoCursor<Document> cursor = collection.find(regex(column, pattern)).iterator();
Pattern=Pattern.compile(“^”+Pattern.quote(beginString),Pattern.CASE不区分大小写);
MongoCursor=collection.find(regex(column,pattern)).iterator();
对于endswith

Pattern pattern = Pattern.compile(Pattern.quote(endString)+"$", Pattern.CASE_INSENSITIVE);
MongoCursor<Document> cursor = collection.find(regex(column, pattern)).iterator();
Pattern=Pattern.compile(Pattern.quote(endString)+“$”,Pattern.CASE不区分大小写);
MongoCursor=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();

Pattern=Pattern.compile((?i)(?您现有的代码似乎只是剥离了
*
通配符。将搜索字符串转换为可用于的正则表达式。这是mongo shell的,但我需要一种使用java驱动程序的方法。但是,我发现了java驱动程序的筛选器选项,因此我在下面提供了答案。您现有的de似乎只是简单地去除了
*
通配符。将搜索字符串转换为可用于的正则表达式。这是mongo shell的方法,但我需要一种使用java驱动程序的方法。不过,我在java驱动程序中找到了筛选器选项,因此我在下面提供了答案。