在MongoDB的对象中插入数组详解

1. 概述

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

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

在本教程中,我们将讨论如何在 MongoDB 文档中插入数组。 首先,我们将研究使用 MongoDB Shell 将数组插入文档。 然后我们将使用 MongoDB Java driver 代码。

2. 数据库初始化

在我们继续插入查询之前,让我们首先创建一个数据库。 我们称它为 baeldung . 我们还将创建一个名为 student 的示例集合

use baeldung;
db.createCollection(student);

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

3. 使用 MongoDB Shell

要使用 MongoDB Shell 将数组插入到集合中,我们可以简单地将数组作为 JSON Array 类型传递给 shell:

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

上面的查询在 student 集合中插入一个带有数组的文档。 我们可以通过使用 find 运算符查询 student 集合的文档来验证结果:

db.student.find();

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

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

4. 使用 Java Driver Code 插入操作

MongoDB Java Driver 提供了各种方便的方法来帮助我们将文档插入到集合中:

  • 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. Using the BSON Document

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

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

6.1. 插入带有数组的单个文档

首先,让我们使用 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() 方法将带有数组的多个文档插入到集合中:

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);

The above query inserts multiple documents with an array into the student collection.

6.3. 插入一个 Object 数组

最后,让我们在 MongoDB 集合中插入一个 Object 数组类型的文档:

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 Document 类来实现相同的功能。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱游泳的老白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值