Java如何将文档插入MongoDB集合?

在上一个MongoDB示例中,“如何在MongoDB Java驱动程序中表示文档?”中,我们已经看到了在MongoDB Java驱动程序中如何表示MongoDB JSON文档。

利用这些知识,现在是我们学习如何将文档插入MongoDB集合的时候了。我们将创建一个代码片段,将文档插入数据库的teachers集合中school。我们将首先看到完整的代码片段,然后是该代码片段的详细描述。因此,让我们从代码片段开始。

package org.nhooo.example.mongodb;

import com.mongodb.*;

import java.net.UnknownHostException;
import java.util.Arrays;

public class MongoDBInsertDocument {
    public static void main(String[] args) throws UnknownHostException {
        // 创建MongoDB客户端实例。
        MongoClient client = new MongoClient(
                new ServerAddress("localhost", 27017));

        // 从MongoDB实例获取学校数据库。
        DB database = client.getDB("schools");

        // 从数据库中获取教师集合。
        DBCollection collection = database.getCollection("teachers");
        collection.drop();

        // 创建一个要存储在教师集合中的文档。
        DBObject document = new BasicDBObject("firstName", "John")
                .append("lastName", "Doe")
                .append("subject", "Computer Science")
                .append("languages", Arrays.asList("Java", "C", "C++"))
                .append("email", "john.doe@school.com")
                .append("address",
                        new BasicDBObject("street", "Main Apple St. 12")
                                .append("city", "New York")
                                .append("country", "USA"));

        // 打印文档的值。
        System.out.println("document = " + document);

        // 将文档插入数据库中的集合。
        collection.insert(document);

        // 插入集合后,打印文档的值。
        System.out.println("document = " + document);
    }
}

该代码段应该易于理解。但是,我将在这里进一步解释。在代码段的开头,我们从以下几行开始:

public static void main(String[] args) throws UnknownHostException {           
    // 创建MongoDB客户端实例。
    MongoClient client = new MongoClient(
        new ServerAddress("localhost", 27017));
}

这就是我们引导/启动MongoDB Java驱动程序的方式。它在localhost端口连接到MongoDB服务器27017。如果您省略使用此类,ServerAddress则它也将默认连接到localhost端口27017。我们还需要向throws UnknownHostException主方法签名中添加,因为MongoClient在服务器不可用时创建可能会引发此异常。或者,您也可以将代码包装在一个try-catch块中。在接下来的几行中,您可以看到以下代码。

// 从MongoDB实例获取学校数据库。
DB database = client.getDB("schools");

// 从数据库中获取教师集合。
DBCollection collection = database.getCollection("teachers");
collection.drop();

此代码段告诉您如何获取数据库,即school数据库。我们使用client.getDB()方法调用并将数据库名称作为参数来获取数据库。然后,对该数据库的引用存储在名为的变量中database。有了之后,database我们可以teachers通过调用database.getCollection()方法来访问集合。

您还注意到我们调用collection.drop(),这将清除集合。我们仅将其用于示例目的,只是为了确保每次执行代码段时,在插入某些文档之前都会清理集合。

接下来,我们创建要存储在teachers集合中的文档。我们定义一个document带有DBObjecttype的变量,该变量引用type的实例BasicDBObject。并且我们在文档中添加了一些字段,并在数组类型字段中添加了另一个嵌入式文档。

// 创建一个要存储在教师集合中的文档。
DBObject document = new BasicDBObject("firstName", "John")
        .append("lastName", "Doe")
        .append("subject", "Computer Science")
        .append("languages", Arrays.asList("Java", "C", "C++"))
        .append("email", "john.doe@school.com")
        .append("address",
                new BasicDBObject("street", "Main Apple St. 12")
                        .append("city", "New York")
                        .append("country", "USA"));

在最后三行中,我们执行以下操作:

// 打印文档的值。
System.out.println("document = " + document);

// 将文档插入数据库中的集合。
collection.insert(document);

// 插入集合后,打印文档的值。
System.out.println("document = " + document);

在第一个打印输出中,我们将document使用BasicDBObject所有定义的字段值使用上一行中定义的。然后,它调用collection.insert()方法将文档插入到集合中。

在最后一行,我们document再次打印出。您可能会看到结果与第一次打印的结果几乎相同,但是您会注意到,在将其插入到集合中之后,document现在有了另一个字段,该_id字段是Java驱动程序分配为文档的对象ID的字段。的_id,如果我们没有定义自动添加_id文档中域。本质上与我们使用以下代码定义文档相同,其中代码_id类型为org.bson.types.ObjectId。

DBObject document = new BasicDBObject("_id", new ObjectId());

这些是上面代码的实际输出:

document = { 
    "firstName" : "John" , 
    "lastName" : "Doe" , 
    "subject" : "Computer Science" , 
    "languages" : [ "Java" , "C" , "C++"] , 
    "email" : "john.doe@school.com" , 
    "address" : { 
        "street" : "Main Apple St. 12" , 
        "city" : "New York" , 
        "country" : "USA"
    }
}

document = { 
    "firstName" : "John" , 
    "lastName" : "Doe" , 
    "subject" : "Computer Science" , 
    "languages" : [ "Java" , "C" , "C++"] , 
    "email" : "john.doe@school.com" , 
    "address" : { 
        "street" : "Main Apple St. 12" , 
        "city" : "New York" , 
        "country" : "USA"
    },
    "_id" : { "$oid" : "5408744803649d9155a296b7" }
}