Java MongoDB通过邮件正则表达式查找文档

Java MongoDB通过邮件正则表达式查找文档,java,regex,mongodb-query,Java,Regex,Mongodb Query,我正在写一些应用程序,我想找到所有使用雅虎邮件的员工。我的代码如下,不能正常工作。最简单的方法是什么 public static void findAllEmplyestUsingYahooMail(){ try { MongoClient mongoClient = new MongoClient(); DB database = mongoClient.getDB("employeeDB"); DBCo

我正在写一些应用程序,我想找到所有使用雅虎邮件的员工。我的代码如下,不能正常工作。最简单的方法是什么

public static void findAllEmplyestUsingYahooMail(){
        try {

            MongoClient mongoClient = new MongoClient();
            DB database = mongoClient.getDB("employeeDB");
            DBCollection collection = database.getCollection("employeesCollection");

            BasicDBObject regexQuery = new BasicDBObject();
            regexQuery.put("mail", new BasicDBObject("$regex", "^@yahoo.com")
                .append("$options", "is"));

            DBCursor cursor = collection.find(regexQuery);
            while (cursor.hasNext()) {
                System.out.println(cursor.next());
            }


        } catch (UnknownHostException e) {

            e.printStackTrace();
        }
    }

从没有实际执行的角度来看,我认为问题在于正则表达式。应该是这样的:

regexQuery.put("mail", new BasicDBObject("$regex", ".+@yahoo.com") ...

@Codemaster您在mongo shell中尝试过相同的查询吗?它在mongo shell中工作。

请尝试这样做:

regexQuery.put("mail", java.util.regex.Pattern.compile("^@yahoo.com"))
它将转换为正则表达式查询:

db.yourcollection.find({"name": /^@yahoo.com/})

我不知道mongoDb,但如果我敢打赌正则表达式是错的。你是说你想要每封以
@yahoo.com
开头的邮件。尝试将正则表达式更改为:
+@yahoo.com
Nope with.+@yahoo.com不起作用。我知道。用于任何字符,在我的情况下,它不应该工作,因为它不在乎@yahoo.com之前是什么,它是特殊字符@、,!。etc或是数字或大写和小写字母。这就是为什么
+
可以工作的原因。。?因为它匹配所有内容,所以它将能够匹配任何字母和/或数字等。因为这里似乎支持锚定,所以我选择
@yahoo.com$
这个正则表达式模式是错误的,因为它说它应该获得以
@yahoo.com
开头的所有内容。不,它不起作用,我已经尝试过了。我会检查一些其他选项,如果我找到答案,我会让你知道。