1. 程式人生 > >mongodb的簡單操作

mongodb的簡單操作

使用mongodb也有一段時間了,有過其他資料庫使用經驗的人會發現mongodb上手很簡單。個人覺得需要注意的,是關於mongodb的一些修改器的使用。

為了操作演示,先來建立一個數據表

> db.contact.insert({"phone":[{"number":"12345678912","place":"chengdu"},{"number":"12345678913","place":"chengdu"}],"createtime":1440075592})

檢視資料表
> db.contact.find()
{ "_id" : ObjectId("55dac281081c67f0a7549fee"), "phone" : [ { "number" : "123456
78912", "place" : "chengdu" }, { "number" : "12345678913", "place" : "chengdu" }
 ], "createtime" : 1440075592 }

此時開始我們的修改器操作:

1、$inc

修改器 $inc 可以對資料表中摸個為數字型的鍵進行增減的操作。

> db.contact.update({"createtime":1440075592},{"$inc":{"createtime":1}})
檢視資料表
> db.contact.find()
{ "_id" : ObjectId("55dac281081c67f0a7549fee"), "phone" : [ { "number" : "123456
78912", "place" : "chengdu" }, { "number" : "12345678913", "place" : "chengdu" }
 ], "createtime" : 1440075593}
可見,createtime 鍵值增加 1.當然,要減去的話只需要把1換為負數即可。

2、$set

$set 用來指定一個鍵並更新鍵值,如果指定的鍵不存在,則會建立該鍵。

> db.contact.update({"createtime":1440075593},{"$set":{"createtime":1}})
檢視資料表
> db.contact.find()
{ "_id" : ObjectId("55dac281081c67f0a7549fee"), "phone" : [ { "number" : "123456
78912", "place" : "chengdu" }, { "number" : "12345678913", "place" : "chengdu" }
 ], "createtime" : 1}
可見,createtime 鍵值設定為 1。

再指定一個不存在的鍵值

> db.contact.update({"createtime":1},{"$set":{"updatetime":1}})
檢視資料表
> db.contact.find()
{ "_id" : ObjectId("55dac281081c67f0a7549fee"), "phone" : [ { "number" : "123456
78912", "place" : "chengdu" }, { "number" : "12345678913", "place" : "chengdu" }
 ], "createtime" : 1,  "updatetime" : 1 }
增加了 “updatetime”鍵,並設定鍵值為1.

3、$unset

$unset 用來刪除指定的鍵

> db.contact.update({"createtime":1},{"$unset":{"updatetime":1}})
檢視資料表
> db.contact.find()
{ "_id" : ObjectId("55dac281081c67f0a7549fee"), "phone" : [ { "number" : "123456
78912", "place" : "chengdu" }, { "number" : "12345678913", "place" : "chengdu" }
 ], "createtime" : 1 }
刪除了鍵 “updatetime”,此處對目標鍵使用任何具體的鍵值都可以刪除該目標鍵。

4、$push

$push 向資料表中的某個陣列型別的鍵新增一個數組元素,不過濾重複的資料。若鍵不存在,則建立陣列型別的鍵。

> db.contact.update({"createtime":1},{"$push":{"phone":{"number":"12345678914","place":"chengdu"}}})
檢視資料表
> db.contact.find()
{ "_id" : ObjectId("55dac281081c67f0a7549fee"), "phone" : [ { "number" : "123456
78912", "place" : "chengdu" }, { "number" : "12345678913", "place" : "chengdu" }
, { "number" : "12345678914", "place" : "chengdu" } ], "createtime" : 1, }
“phone”鍵中添加了一個數據項。

再指定一個不存在的型別為陣列的鍵

> db.contact.update({"createtime":1},{"$push":{"email":"[email protected]"}})
看看資料表
> db.contact.find()
{ "_id" : ObjectId("55dac281081c67f0a7549fee"), "phone" : [ { "number" : "123456
78912", "place" : "chengdu" }, { "number" : "12345678913", "place" : "chengdu" }
, { "number" : "12345678914", "place" : "chengdu" } ], "createtime" : 1, "email"
 : [ "[email protected]" ] }
添加了“email”鍵,並設定了指定的鍵值。

5、$addToSet

$addToSet 類似 $push ,都是給陣列型別鍵值新增一個元素時,但是 $addToSet 能夠避免在陣列中產生重複資料。

6、$pull

$pull 對資料表中的某個陣列型別的鍵刪除一個數組元素

> db.contact.update({"createtime":1},{"$pull":{"phone":{"number":"12345678914"}}})
檢視資料表
> db.contact.find()
{ "_id" : ObjectId("55dac281081c67f0a7549fee"), "phone" : [ { "number" : "123456
78912", "place" : "chengdu" }, { "number" : "12345678913", "place" : "chengdu" }
 ], "createtime" : 1, "email" : [ "[email protected]" ] }
可見,刪除了指定的資料項

7、$pop

$pop 跟 $pull 都是陣列修改器,但是 $pop 只是從陣列的頭或者尾刪除陣列中的元素

先插入幾個資料

> db.contact.update({"createtime":1},{"$push":{"phone":{"number":"12345678914","
place":"chengdu"}}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.contact.update({"createtime":1},{"$push":{"phone":{"number":"12345678915","
place":"chengdu"}}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.contact.update({"createtime":1},{"$push":{"phone":{"number":"12345678916","
place":"chengdu"}}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.contact.update({"createtime":1},{"$push":{"phone":{"number":"12345678917","
place":"chengdu"}}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
此時
> db.contact.find()
{ "_id" : ObjectId("55dac281081c67f0a7549fee"), "phone" : [ { "number" : "123456
78912", "place" : "chengdu" }, { "number" : "12345678913", "place" : "chengdu" }
, { "number" : "12345678914", "place" : "chengdu" }, { "number" : "12345678915",
 "place" : "chengdu" }, { "number" : "12345678916", "place" : "chengdu" }, { "nu
mber" : "12345678917", "place" : "chengdu" } ], "createtime" : 1, "email" : [ "1
[email protected]" ] }
執行
> db.contact.update({"createtime":1},{"$pop":{"phone":-1}})
得到
> db.contact.find()
{ "_id" : ObjectId("55dac281081c67f0a7549fee"), "phone" : [ { "number" : "123456
78913", "place" : "chengdu" }, { "number" : "12345678914", "place" : "chengdu" }
, { "number" : "12345678915", "place" : "chengdu" }, { "number" : "12345678916",
 "place" : "chengdu" }, { "number" : "12345678917", "place" : "chengdu" } ], "cr
eatetime" : 1, "email" : [ "[email protected]" ] }
操作結果,從頭部刪除了資料項

再次執行

> db.contact.update({"createtime":1},{"$pop":{"phone":1}})
得到
> db.contact.find()
{ "_id" : ObjectId("55dac281081c67f0a7549fee"), "phone" : [ { "number" : "123456
78913", "place" : "chengdu" }, { "number" : "12345678914", "place" : "chengdu" }
, { "number" : "12345678915", "place" : "chengdu" }, { "number" : "12345678916",
 "place" : "chengdu" } ], "createtime" : 1, "email" : [ "[email protected]" ] }
操作結果,從尾部刪除了資料項
其實,“phone”對應鍵值為正數則從尾部刪除,為負數則從頭部刪除