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驱动支持DBObject
和BSON
文档。
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上找到。