【问题标题】:User search feature to Query data in MongoDB using the Java driver使用 Java 驱动程序在 MongoDB 中查询数据的用户搜索功能
【发布时间】:2015-07-20 16:51:36
【问题描述】:

我想在 Eclipse 中使用 MongoDB 创建一个简单的用户搜索功能。一旦用户输入他们想在数据库中找到的内容,所有匹配的数据都将被打印出来。我该怎么做?

到目前为止,这是我的代码:

public static void searchFirstName()
{
    System.out.println("Enter first name you are searching for:");
    search = userInput.nextLine();

    FindIterable<Document> iterable = db.getCollection("names").find(all("anyname", search));
    System.out.println(iterable);
}

【问题讨论】:

  • 您能提供更多代码吗? “all”方法的实现是什么?
  • "All" 输出与用户搜索匹配的每个值。所以如果我搜索“Leslie”,那么所有名字为 Leslie 的用户都会被拉上来。我真的没有更多的代码。我已经连接到 MongoDB,如果我在代码中做一个简单的查询,它就可以工作。我只需要了解如何允许用户的输入链接到数据库。
  • 无论如何我可以做到这一点吗? @rzo

标签: java mongodb search driver


【解决方案1】:

如果我理解正确,您正在寻找某种通配符搜索来匹配您的姓名,即使它们不完全匹配?

附上一段代码,使用正则表达式实现通配符搜索,类似于SQL like %term%

这里是:

public static void main(String[] args) {
    MongoClient mongo = new MongoClient("localhost", 27017);
    MongoDatabase db = mongo.getDatabase("myDatabase");

    List<Document> someDummyData = new ArrayList<>();
    for (int i = 0; i < 20; i++) {
        someDummyData.add(new Document("name", "Leslie" + i));
    }
    someDummyData.add(new Document("name", "John Wayne"));
    someDummyData.add(new Document("name", "Wayne"));
    someDummyData.add(new Document("name", "Acme"));
    someDummyData.add(new Document("name", "Leslie"));

    db.getCollection("names").insertMany(someDummyData);

    //we will have 24 names in our database
    System.out.println(db.getCollection("names").count());

    //obtain the search term ....
    String searchTerm = "Leslie";

    //an index is a good idea, if we want to use wildcard search... 1 means ascending order
    db.getCollection("names").createIndex(new Document("name", 1));

    //we will find exactly one element      -> this is exact match like in SQL: where name = searchTerm
    Iterable<Document> search1 =  db.getCollection("names").find(new Document("name", searchTerm));

    for(Document search : search1) {
        System.out.println("Exact match: " + search);
     }


    //we will find a few matches -> this is wildcard match like in SQL: where name LIKE %searchTerm$

    Iterable<Document> search2 = db.getCollection("names").find(regex("name", String.format(".*((?i)%s).*",
            searchTerm)));

    for (Document search : search2) {
        System.out.println("Wildcard match: " + search);
    }

    mongo.close();
}

【讨论】:

  • 哇,非常感谢!这正是我所需要的。
【解决方案2】:

使用 MongoDB Java Driver v3.2.2,您可以执行以下操作:

FindIterable<Document> iterable = collection.find(Document.parse("{name: {$regex: \"Leslie\"}}"));

这将返回所有在name 字段中包含“Leslie”的文档。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多