# MongoDB 查找文档示例

> 原文： [https://howtodoinjava.com/mongodb/mongodb-find-documents/](https://howtodoinjava.com/mongodb/mongodb-find-documents/)

学习**在 [MongoDB](//howtodoinjava.com/nosql/introduction-to-mongodb-why-mongodb/ "MongoDB Basics")** 中找到文档。 此 **mongodb 查找文档教程**涵盖了多种方法，它们与我们在 SQL 中使用`WHERE`子句的条件相同，可以**查询单个文档**或**查找多个文档**。

```java
Table of Contents

1) Select all documents from a collection
2) Select first document from a collection
3) Select single document and limited field(s) from a collection
4) Select all documents with unique id from a collection
5) Document ids IN clause example
6) Document ids less than or greater than clause example
7) Document ids NOT IN clause example
8) Documents matching multiple fields example
9) Documents matching field value to some REGEX example
```

## MongoDB 查找文档 – 测试数据准备

为了构建和运行本教程中使用的示例，我在数据库中填充了 20 个员工文档，其中`employeeId`从 1 到 20，以及`employeeName`从`TestEmployee_1`到`TestEmployee_10`。

```java
private static void setUpTestData(DBCollection collection){
    for (int i=1; i <= 10; i++) {
        collection.insert(new BasicDBObject().append("employeeId", i).append("employeeName", "TestEmployee_"+i));
    }
}

```

现在运行我们的示例，并获取不同场景下的数据。

## 1\. MongoDB `find()` – 从集合中选择所有文档

```java
private static void selectAllRecordsFromACollection(DBCollection collection) 
{
    DBCursor cursor = collection.find();
    while(cursor.hasNext())
    {
        System.out.println(cursor.next());
    }
}

```

程序输出。

```java
{ "_id" : { "$oid" : "538782753641d31b0cad0142"} , "employeeId" : 1 , "employeeName" : "TestEmployee_1"}
{ "_id" : { "$oid" : "538782753641d31b0cad0143"} , "employeeId" : 2 , "employeeName" : "TestEmployee_2"}
{ "_id" : { "$oid" : "538782753641d31b0cad0144"} , "employeeId" : 3 , "employeeName" : "TestEmployee_3"}
{ "_id" : { "$oid" : "538782753641d31b0cad0145"} , "employeeId" : 4 , "employeeName" : "TestEmployee_4"}
{ "_id" : { "$oid" : "538782753641d31b0cad0146"} , "employeeId" : 5 , "employeeName" : "TestEmployee_5"}
{ "_id" : { "$oid" : "538782753641d31b0cad0147"} , "employeeId" : 6 , "employeeName" : "TestEmployee_6"}
{ "_id" : { "$oid" : "538782753641d31b0cad0148"} , "employeeId" : 7 , "employeeName" : "TestEmployee_7"}
{ "_id" : { "$oid" : "538782753641d31b0cad0149"} , "employeeId" : 8 , "employeeName" : "TestEmployee_8"}
{ "_id" : { "$oid" : "538782753641d31b0cad014a"} , "employeeId" : 9 , "employeeName" : "TestEmployee_9"}
{ "_id" : { "$oid" : "538782753641d31b0cad014b"} , "employeeId" : 10 , "employeeName" : "TestEmployee_10"}

```

## 2\. MongoDB `findOne()` – 从集合中选择第一个文档

```java
private static void selectFirstRecordInCollection(DBCollection collection) 
{
    DBObject dbObject = collection.findOne();
    System.out.println(dbObject);
}

```

程序输出：

```java
{ "_id" : { "$oid" : "538782a53641ed9125df86c0"} , "employeeId" : 1 , "employeeName" : "TestEmployee_1"}

```

## 3\. MongoDB `where`子句 – 从集合中选择单个文档和有限的字段

```java
private static void selectSingleRecordAndFieldByRecordNumber(DBCollection collection) 
{
    BasicDBObject whereQuery = new BasicDBObject();
    whereQuery.put("employeeId", 5);
    BasicDBObject fields = new BasicDBObject();
    fields.put("employeeId", 1);

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

```

程序输出：

```java
{ "_id" : { "$oid" : "53878332364101041fb2c141"} , "employeeId" : 5}

```

## 4\. MongoDB 通过 ID 查找文档

```java
private static void selectAllRecordByRecordNumber(DBCollection collection) 
{
    BasicDBObject whereQuery = new BasicDBObject();
    whereQuery.put("employeeId", 5);
    DBCursor cursor = collection.find(whereQuery);
    while(cursor.hasNext()) {
        System.out.println(cursor.next());
    }
}

```

程序输出：

```java
{ "_id" : { "$oid" : "538783623641e9b2da299fa7"} , "employeeId" : 5 , "employeeName" : "TestEmployee_5"}

```

## 5\. MongoDB `IN`子句示例

```java
private static void in_Example(DBCollection collection) 
{
    BasicDBObject inQuery = new BasicDBObject();

    List<Integer> list = new ArrayList<Integer>();
    list.add(2);
    list.add(4);
    list.add(5);

    inQuery.put("employeeId", new BasicDBObject("$in", list));

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

```

程序输出：

```java
{ "_id" : { "$oid" : "5387838d3641024de174c795"} , "employeeId" : 2 , "employeeName" : "TestEmployee_2"}
{ "_id" : { "$oid" : "5387838d3641024de174c797"} , "employeeId" : 4 , "employeeName" : "TestEmployee_4"}
{ "_id" : { "$oid" : "5387838d3641024de174c798"} , "employeeId" : 5 , "employeeName" : "TestEmployee_5"}

```

## 6\. MongoDB 小于或大于子句示例

```java
private static void lessThan_GreaterThan_Example(DBCollection collection) 
{
    BasicDBObject getQuery = new BasicDBObject();
    getQuery.put("employeeId", new BasicDBObject("$gt", 2).append("$lt", 5));
    DBCursor cursor = collection.find(getQuery);
    while(cursor.hasNext()) {
        System.out.println(cursor.next());
    }
}

```

程序输出：

```java
{ "_id" : { "$oid" : "538783b63641720cd34f98c8"} , "employeeId" : 3 , "employeeName" : "TestEmployee_3"}
{ "_id" : { "$oid" : "538783b63641720cd34f98c9"} , "employeeId" : 4 , "employeeName" : "TestEmployee_4"}

```

## 7\. MongoDb `NOT IN`子句示例

```java
private static void negation_Example(DBCollection collection) 
{
    BasicDBObject neQuery = new BasicDBObject();
    neQuery.put("employeeId", new BasicDBObject("$ne", 4));
    DBCursor cursor = collection.find(neQuery);
    while(cursor.hasNext()) {
        System.out.println(cursor.next());
    }
}

```

程序输出：

```java
{ "_id" : { "$oid" : "538783db3641d3ca9d400510"} , "employeeId" : 1 , "employeeName" : "TestEmployee_1"}
{ "_id" : { "$oid" : "538783db3641d3ca9d400511"} , "employeeId" : 2 , "employeeName" : "TestEmployee_2"}
{ "_id" : { "$oid" : "538783db3641d3ca9d400512"} , "employeeId" : 3 , "employeeName" : "TestEmployee_3"} 
{ "_id" : { "$oid" : "538783db3641d3ca9d400514"} , "employeeId" : 5 , "employeeName" : "TestEmployee_5"} //4 is missing
{ "_id" : { "$oid" : "538783db3641d3ca9d400515"} , "employeeId" : 6 , "employeeName" : "TestEmployee_6"}
{ "_id" : { "$oid" : "538783db3641d3ca9d400516"} , "employeeId" : 7 , "employeeName" : "TestEmployee_7"}
{ "_id" : { "$oid" : "538783db3641d3ca9d400517"} , "employeeId" : 8 , "employeeName" : "TestEmployee_8"}
{ "_id" : { "$oid" : "538783db3641d3ca9d400518"} , "employeeId" : 9 , "employeeName" : "TestEmployee_9"}
{ "_id" : { "$oid" : "538783db3641d3ca9d400519"} , "employeeId" : 10 , "employeeName" : "TestEmployee_10"}

```

## 8\. MongoDB 查找匹配多个字段的文档示例

```java
private static void andLogicalComparison_Example(DBCollection collection) 
{
    BasicDBObject andQuery = new BasicDBObject();
    List<BasicDBObject> obj = new ArrayList<BasicDBObject>();
    obj.add(new BasicDBObject("employeeId", 2));
    obj.add(new BasicDBObject("employeeName", "TestEmployee_2"));
    andQuery.put("$and", obj);

    System.out.println(andQuery.toString());

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

```

程序输出：

```java
{ "$and" : [ { "employeeId" : 2} , { "employeeName" : "TestEmployee_2"}]}
{ "_id" : { "$oid" : "5387840336418a41167caaa4"} , "employeeId" : 2 , "employeeName" : "TestEmployee_2"}

```

## 9\. MongoDb 查找匹配`REGEX`的文档示例

```java
private static void regex_Example(DBCollection collection) {
    BasicDBObject regexQuery = new BasicDBObject();
    regexQuery.put("employeeName", 
        new BasicDBObject("$regex", "TestEmployee_[3]")
        .append("$options", "i"));

    System.out.println(regexQuery.toString());

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

```

程序输出：

```java
{ "employeeName" : { "$regex" : "TestEmployee_[3]" , "$options" : "i"}}
{ "_id" : { "$oid" : "538784213641917ce7068c57"} , "employeeId" : 3 , "employeeName" : "TestEmployee_3"}

```

## 10\. 所有 mondodb 查找查询示例

```java
package examples.mongodb.crud;

import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.List;

import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.DBObject;
import com.mongodb.MongoClient;
import com.mongodb.WriteResult;

public class MongoDBSelectExample {

    private static void setUpTestData(DBCollection collection){
        for (int i=1; i <= 10; i++) {
            collection.insert(new BasicDBObject().append("employeeId", i).append("employeeName", "TestEmployee_"+i));
        }
    }

    public static void main(String[] args) throws UnknownHostException 
    {
        MongoClient mongo = new MongoClient("localhost", 27017);
        DB db = mongo.getDB("howtodoinjava");
        DBCollection collection = db.getCollection("users");

        //Delete All documents before running example again
        WriteResult result = collection.remove(new BasicDBObject());
        System.out.println(result.toString());

        //Set up test data
        setUpTestData(collection);

        //Select all document from a collection
        selectAllRecordsFromACollection(collection);

        //Select first document in collection
        selectFirstRecordInCollection(collection);

        //Select single document and single field based on record number
        selectSingleRecordAndFieldByRecordNumber(collection);

        //Select all documents where record number = n
        selectAllRecordByRecordNumber(collection);

        //In example
        in_Example(collection);

        //Less than OR greater than example
        lessThan_GreaterThan_Example(collection);

        //Select document where record number != n
        negation_Example(collection);

        //And logical comparison query example
        andLogicalComparison_Example(collection);

        //Select documents based on regex match LIKE example
        regex_Example(collection);

    }

    private static void selectFirstRecordInCollection(DBCollection collection) {
        DBObject dbObject = collection.findOne();
        System.out.println(dbObject);
    }

    private static void selectAllRecordsFromACollection(DBCollection collection) {
        DBCursor cursor = collection.find();
        while(cursor.hasNext()) {
            System.out.println(cursor.next());
        }
    }

    private static void selectSingleRecordAndFieldByRecordNumber(DBCollection collection) {
        BasicDBObject whereQuery = new BasicDBObject();
        whereQuery.put("employeeId", 5);
        BasicDBObject fields = new BasicDBObject();
        fields.put("employeeId", 1);

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

    private static void selectAllRecordByRecordNumber(DBCollection collection) {
        BasicDBObject whereQuery = new BasicDBObject();
        whereQuery.put("employeeId", 5);
        DBCursor cursor = collection.find(whereQuery);
        while(cursor.hasNext()) {
            System.out.println(cursor.next());
        }
    }

    private static void in_Example(DBCollection collection) {
        BasicDBObject inQuery = new BasicDBObject();
        List<Integer> list = new ArrayList<Integer>();
        list.add(2);
        list.add(4);
        list.add(5);
        inQuery.put("employeeId", new BasicDBObject("$in", list));
        DBCursor cursor = collection.find(inQuery);
        while(cursor.hasNext()) {
            System.out.println(cursor.next());
        }
    }

    private static void lessThan_GreaterThan_Example(
            DBCollection collection) {
        BasicDBObject gtQuery = new BasicDBObject();
        gtQuery.put("employeeId", new BasicDBObject("$gt", 2).append("$lt", 5));
        DBCursor cursor = collection.find(gtQuery);
        while(cursor.hasNext()) {
            System.out.println(cursor.next());
        }
    }

    private static void negation_Example(DBCollection collection) {
        BasicDBObject neQuery = new BasicDBObject();
        neQuery.put("employeeId", new BasicDBObject("$ne", 4));
        DBCursor cursor = collection.find(neQuery);
        while(cursor.hasNext()) {
            System.out.println(cursor.next());
        }
    }

    private static void andLogicalComparison_Example(DBCollection collection) {
        BasicDBObject andQuery = new BasicDBObject();
        List<BasicDBObject> obj = new ArrayList<BasicDBObject>();
        obj.add(new BasicDBObject("employeeId", 2));
        obj.add(new BasicDBObject("employeeName", "TestEmployee_2"));
        andQuery.put("$and", obj);

        System.out.println(andQuery.toString());

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

    private static void regex_Example(DBCollection collection) {
        BasicDBObject regexQuery = new BasicDBObject();
        regexQuery.put("employeeName", 
            new BasicDBObject("$regex", "TestEmployee_[3]")
            .append("$options", "i"));

        System.out.println(regexQuery.toString());

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

```

所有这些都是通过**从 MongoDB** 中获取文件的不同技术。

学习愉快！

参考文献：

[MongoDB `find()`文档](https://docs.mongodb.com/manual/reference/method/db.collection.find/)