前面兩篇介紹了 MongoDB 中的兩種關係:一對一關係及一對多關係,今天要來跟大家介紹第3種關係:多對多關係。
我們在「Day04: MongoDB 的 CRUD(2) - Insert & Delete」文章中介紹到可以使用 insertOne() 及 insertMany() 來新增單筆或多筆資料。
insertOne():db.test.insertOne({A:1, B:2})
insertMany():db.test.insertMany([{A:3, B:4}, {A:5, B:6}])
我們可以發現不管是用 insertOne() 還是 insertMany(),都是回傳一個 JSON 結構,因此我們可以用變數去儲存這些資訊:var a = db.test.insertMany([{A:3, B:4}, {A:5, B:6}])
接著,就可以取得 insertIds 的資訊:
而為什麼我們不建議使用另一種新增資料的方法:insert() 呢?因為當我們使用 insert() 來新增資料,回傳值不會有 insertedIds 的資訊,需要再透過 find() 才能取得。
db.test.insert({A:10, B:20})
db.test.find()
db.test.insert([{A:30,B:40}, {A:50,B:60}])
db.test.find()
我們透過以下步驟來觀察 insertMany() 是否按順序新增對結果的影響為何。
先新增一個 document:db.test.insertOne({_id:1, A:1, B:2})
再新增多個 document,但 _id 有重複:db.test.insertMany([{_id:2, A:10},{_id:1, A:20},{_id:3, A:30}])
執行步驟 2 時會報錯 "writeErrors"
但透過 find() 查看會發現:_id:2 的已成功新增
使用 ordered 讓 insertMany() 不依順序去執行,會嘗試完所有新增:db.test.insertMany([{_id:2, A:10},{_id:1, A:20},{_id:3, A:30}], {ordered:false})
上述方法不建議使用,但為了防止 _id 重複,我們在新增資料時不指定 _id,而是讓系統自行產生。
今天開始會跟大家探討 mongoDB 中更深入的 CRUD 操作,今天介紹了不建議使用 insert() 的原因以及 insertMany() 時要注意的問題。下一篇會介紹如何直接將 JSON 檔案導入資料庫中進行操作。