1. 概述

MongoDB 是最受欢迎的开源分布式文档导向的NoSQL数据库。MongoDB中的文档是一种数据结构,具有类似于JSON的对象,包含字段和值对。

为了将文档插入MongoDB集合,我们可以使用不同的方法,如insert()insertOne()insertMany()

在这篇教程中,我们将讨论如何在MongoDB文档中插入数组。首先,我们将通过MongoDB Shell查询来插入数组到文档中,然后使用MongoDB Java驱动代码。

2. 数据库初始化

在我们继续进行插入查询之前,先创建一个数据库。我们称之为baeldung。还会创建一个名为student: 的样本集合:

use baeldung;
db.createCollection(student);

使用此命令,我们的示例baeldung数据库和student集合已成功设置。我们将使用这些例子来演示所有操作。

3. 使用MongoDB Shell

要使用MongoDB Shell将数组插入集合,只需将数组作为JSON数组类型传递给Shell:

db.student.insert({
    "studentId" : "STU1",
    "name" : "Avin",
    "Age" : 12,
    "courses" : ["Science", "Math"]
});

上述查询向student集合中插入了一个包含数组的单个文档。我们可以使用find运算符查询文档来验证结果:

db.student.find();

上述查询返回了插入的student集合文档:

{
    "_id" : ObjectId("631da4197581ba6bc1d2524d"),
    "studentId" : "STU1",
    "name" : "Avin",
    "Age" : 12,
    "courses" : [ "Science", "Math" ]
}

4. 使用Java驱动程序代码进行插入操作

MongoDB Java驱动提供了多种便利方法帮助我们将文档插入集合:

  • insert() - 将单个文档或多文档插入集合
  • insertOne() - 将单个文档插入集合
  • insertMany() - 将多文档插入集合

上述任何方法都可以用于在MongoDB集合上执行insert操作。

接下来,我们将深入研究使用Java MongoDB驱动实现数组插入操作。MongoDB Java驱动支持DBObjectBSON文档。

5. 使用DBObject

这里,DBObject是MongoDB遗留驱动的一部分,但在MongoDB的新版本中已经弃用。

让我们将包含数组的DBObject文档插入student集合:

BasicDBList coursesList = new BasicDBList();
coursesList.add("Chemistry");
coursesList.add("Science");

DBObject student = new BasicDBObject().append("studentId", "STU1")
  .append("name", "Jim")
  .append("age", 13)
  .append("courses", coursesList);

dbCollection.insert(student);

上述查询将一个包含数组的单个DBObject文档插入到student集合中。

6. 使用BSON文档

BSON文档是Java中访问MongoDB文档的新方式,它由新的客户端堆栈构建。幸运的是,它也更易于使用。

Java驱动程序提供了一个org.bson.Document类,用于将包含数组的Bson文档对象插入到student集合中。

6.1. 使用insertOne()插入单个文档

首先,让我们使用insertOne()方法将包含数组的单个文档插入集合:

List coursesList = new ArrayList<>();
coursesList.add("Science");
coursesList.add("Geography");

Document student = new Document().append("studentId", "STU2")
  .append("name", "Sam")
  .append("age", 13)
  .append("courses", coursesList);

collection.insertOne(student);

上述查询将一个包含数组的单个文档插入到student集合中。需要注意的是,Document类的append(String, Object)方法接受一个Object作为值。我们可以将任何Object类型的List作为值传递,以便将其作为数组插入到文档中。

6.2. 使用insertMany()插入多个文档

接下来,让我们使用insertMany()方法将包含数组的多个文档插入集合:

List coursesList1 = new ArrayList<>();
coursesList1.add("Chemistry");
coursesList1.add("Geography");

Document student1 = new Document().append("studentId", "STU3")
  .append("name", "Sarah")
  .append("age", 12)
  .append("courses", coursesList1);

List coursesList2 = new ArrayList<>();
coursesList2.add("Math");
coursesList2.add("History");

Document student2 = new Document().append("studentId", "STU4")
  .append("name", "Tom")
  .append("age", 13)
  .append("courses", coursesList2);

List<Document> students = new ArrayList<>();
students.add(student1);
students.add(student2);

collection.insertMany(students);

上述查询将包含数组的多个文档插入到student集合中。

6.3. 插入Object数组

最后,我们将插入包含Object数组类型的文档到MongoDB集合:

Document course1 = new Document().append("name", "C1")
  .append("points", 5);

Document course2 = new Document().append("name", "C2")
  .append("points", 7);

List<Document> coursesList = new ArrayList<>();
coursesList.add(course1);
coursesList.add(course2);

Document student = new Document().append("studentId", "STU5")
  .append("name", "Sam")
  .append("age", 13)
  .append("courses", coursesList);

collection.insertOne(student);

上述查询将包含Object数组的多个文档插入到student集合中。在这里,我们插入了一个包含列表的文档作为数组的文档到集合中。同样,我们可以构造任何复杂的数组Object并将其插入MongoDB集合。

7. 总结

在这篇文章中,我们了解了如何以各种方式将包含数组Object的文档插入到MongoDB集合。我们通过MongoDB Shell查询和相应的Java驱动程序代码实现讨论了这些用例。

使用Java驱动程序代码,我们首先使用已弃用的DBObject类实现了实现。然后,我们学习了如何使用新的BSON文档类实现相同的功能。

所有这些示例和代码片段的实现可在GitHub上找到。