在 MongoDB 中的對象內插入數組
一、概述
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 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驅動代碼插入操作
MongoDB Java Driver 提供了各種方便的方法來幫助我們將文檔插入到集合中:
-
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()
方法將帶有數組的單個文檔插入到集合中:
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);
上面的查詢將帶有數組的多個文檔插入到student
集合中。
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 類來實現相同的功能。
所有這些示例和代碼片段的實現都可以在 GitHub 上找到。