插入方法
db.collection.insertOne() |
插入單條文件到集合中
|
db.collection.insertMany() |
插入多條文件到集合中 |
db.collection.insert() |
插入單條或多條文件到集合中
|
insertOne() 語法格式
db.collection.insertOne( <document>, { writeConcern: <document> } )
只能傳一個文件,不能是陣列
insertMany() 語法格式
db.collection.insertMany( [ <document 1> , <document 2>, ... ], { writeConcern: <document>, ordered: <boolean> } )
必傳一個陣列,即使是空陣列
insert() 語法格式
db.collection.insert( <document or array of documents>, { writeConcern: <document>, ordered: <boolean> } )
可以傳單條文件或者文件陣列
writeConcern
看著是一種出錯捕捉機制,搞清楚要幹嘛再更新吧
ordered
- true:對陣列中的文件執行有序插入,其中一個文件發生錯誤,MongoDB 將返回而不處理陣列中的其餘文件(預設)
- false:無序插入,其中一個文件發生錯誤,則繼續處理陣列中的其他文件
三種 insert 方法的返回內容
// 插入單條文件 > db.test.insert({}) WriteResult({ "nInserted" : 1 }) // 插入多條文件 > db.test.insert([]) BulkWriteResult({ "writeErrors" : [ ], "writeConcernErrors" : [ ], "nInserted" : 0, "nUpserted" : 0, "nMatched" : 0, "nModified" : 0, "nRemoved" : 0, "upserted" : [ ] })
插入操作的重點知識
- MongoDB 向集合裡插入記錄時,無須事先對資料儲存結構進行定義,每個文件的資料結構都可以是不同的
- 如果待插入的集合不存在,則插入操作會預設建立集合
- MongoDB 中,插入操作以單個集合為目標
- MongoDB 中的所有寫入操作都是單個文件級別的原子操作
插入不指定 _id 欄位的文件
db.test.insert( { item : "card", qty : 15 })
MongoDB 會自動給它分配一個 _id
db.test.find() { "_id" : ObjectId("60b4e2eeec0fd33d89e97a98"), "item" : "card", "qty" : 15 }
這些 Objectld 值與執行操作時的機器和時間有關
插入指定 _id 欄位的文件
值 _id 必須在集合中唯一,以避免重複鍵錯誤
db.test.insert( { _id: 10, item: "box", qty: 20 } ) db.test.find() { "_id" : 10, "item" : "box" , "qty": 20 }
可以看到新插入文件的 id 值為設定的 id 值
插入文件陣列
插入的多個文件無須具有相同的欄位
db.test1.insert( [ { _id: 11, item: "pencil", qty: 50, type: "no.2" }, { item: "pen", qty: 20 }, { item: "eraser", qty: 25 } ] )
- 的第一個文件包含一個 _id 欄位和一個 type 欄位
- 第二個和第三個文件不包含 _id 欄位
- 因此,在插入過程中,MongoDB 將會為第二個和第三個文件建立預設 _id 欄位
db.test1.find() { "_id" : 11, "item" : "pencil", "qty" : 50, "type" : "no.2" } { "_id" : ObjectId("60b4e98fec0fd33d89e97a99"), "item" : "pen", "qty" : 20 } { "_id" : ObjectId("60b4e98fec0fd33d89e97a9a"), "item" : "eraser", "qty" : 25 }
無序插入
db.products.insert( [ { _id: 20, item: "lamp", qty: 50, type: "desk" }, { _id: 21, item: "lamp", qty: 20, type: "floor" }, { _id: 22, item: "bulk", qty: 100 } ], { ordered: false } )
如果在插入其中一個文件期間發生錯誤,MongoDB 會繼續將其餘文件插入陣列中