iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 3
0
Big Data

30天之你好MongoDB系列 第 3

30-3之新手村CRUD---新增

安裝好MongoDB後,接下來本篇主要說明如何新增資料至MongoDB中,而用更精確的詞彙來說是,如何新增documentcollection中。這邊我們會說明以下幾種MongoDB所的方法,來建立資料, 並說明這三種有何不同,而至於效能部份請看下篇~

  • Insert
  • InsertOne
  • InsertMany

~ Insert方法 ~


單筆資料Insert

insert函數可以將一個document建立到collection裡,我們這裡建立一個簡單的範例來看如何使用insert

首先我們的需求是要建立一份使用者清單(collection),然後可以存放多筆使用者資料(document),我們假設使用者資料如下。

順到一提,mongodb自帶javascript shell,所以可以在shell執行javascript 一些語法。

user1 = {
	name : "Mark",
	age : 18,
	bmi : 10
}

然後我們要將這筆document新增至usercollection裡。

db.user.insert(user1);

新增完後,我們可以執行find指令,來查看usercollection中的資料。

db.user.find()

程式執行過程如下圖,而回傳值如下,代表成功新增一筆。

WriteResult({"nInserted" : 1})

多筆資料Insert

Insert函數同時也可以執行多筆,但效能好不好下篇會有比較。其中注意insert有個參數orderedtrue時代表如果其中一筆資料有問題,它就會停止下來,後面的資料都不會新增,而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會回傳你所建立的documentObjectIdObjectId是系統自動生成的,是唯一值,而第二點不同就如同它的名字,他只能一次新增一筆。

我們來試試下列範例。

user1 = {
	name : "Mark",
	age : 18,
	bmi : 10
}

db.user.insertOne(user1);

從結果可以看到他回傳了該筆資料的ObjectId

~ InsertMany方法 ~


InsertMany函數是mongodb 3.2版時新增的,用法也和insert函數差不多,但比較不同的是他的回傳值如下,他會回傳所有所建立的documnetObjectId

{
   "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的話就用insertManyinsertOne,不需要的話就用insert就行了,對了還有這三個方法如果要新增到的collection不存在的話會自動幫你建立,至於速度方法我們將於下一篇做比較。

P.S 不要愛上我的Kevin ~

~ 參考資料 ~



上一篇
30-1之MongoDB基礎
下一篇
30-4之新手村CRUD---新增之Bulk與新增效能測試
系列文
30天之你好MongoDB30

尚未有邦友留言

立即登入留言