安裝好MongoDB後,接下來本篇主要說明如何新增資料至MongoDB中,而用更精確的詞彙來說是,如何新增document至collection中。這邊我們會說明以下幾種MongoDB所的方法,來建立資料, 並說明這三種有何不同,而至於效能部份請看下篇~
Insert
InsertOne
InsertMany
Insert方法 ~insert函數可以將一個document建立到collection裡,我們這裡建立一個簡單的範例來看如何使用insert。
首先我們的需求是要建立一份使用者清單(collection),然後可以存放多筆使用者資料(document),我們假設使用者資料如下。
順到一提,mongodb自帶javascript shell,所以可以在shell執行javascript 一些語法。
user1 = {
name : "Mark",
age : 18,
bmi : 10
}
然後我們要將這筆document新增至user的collection裡。
db.user.insert(user1);
新增完後,我們可以執行find指令,來查看user這collection中的資料。
db.user.find()
程式執行過程如下圖,而回傳值如下,代表成功新增一筆。
WriteResult({"nInserted" : 1})

Insert函數同時也可以執行多筆,但效能好不好下篇會有比較。其中注意insert有個參數ordered ,true時代表如果其中一筆資料有問題,它就會停止下來,後面的資料都不會新增,而false時,則代表不會停下來,後面的資料會繼續新增,預設是true。
我們用下面範例來看看使用方法。
var user1 = {
name : "Mark",
age : 18,
bmi : 10
},
count = 1000,
users = [];
for (var i=0;i<count;i++){
users.push(user1);
}
db.user.insert(users,{ordered:false})
結果如下圖。

InsertOne方法 ~InsertOne函數事實上用法和insert差不多,只有兩點不同,首先是回傳,insertOne會回傳你所建立的document的ObjectId,ObjectId是系統自動生成的,是唯一值,而第二點不同就如同它的名字,他只能一次新增一筆。
我們來試試下列範例。
user1 = {
name : "Mark",
age : 18,
bmi : 10
}
db.user.insertOne(user1);
從結果可以看到他回傳了該筆資料的ObjectId。

InsertMany方法 ~InsertMany函數是mongodb 3.2版時新增的,用法也和insert函數差不多,但比較不同的是他的回傳值如下,他會回傳所有所建立的documnet的ObjectId。
{
"acknowledged" : true,
"insertedIds" : [
ObjectId("562a94d381cb9f1cd6eb0e1a"),
ObjectId("562a94d381cb9f1cd6eb0e1b"),
ObjectId("562a94d381cb9f1cd6eb0e1c")
]
}
以下為範例,來看看他的使用方法。
var user1 = {
name : "Mark",
age : 18,
bmi : 10
},
count = 10,
users = [];
for (var i=0;i<count;i++){
users.push(user1);
}
db.user.insertMany(users,{ordered:false})
執行過程與結果如下。

這三種方法事實上用法大同小異,有時只差在回傳值,如果需要回傳ObjectId的話就用insertMany或insertOne,不需要的話就用insert就行了,對了還有這三個方法如果要新增到的collection不存在的話會自動幫你建立,至於速度方法我們將於下一篇做比較。
P.S 不要愛上我的Kevin ~