1. 程式人生 > >MongoDB之具體使用(一)

MongoDB之具體使用(一)

MongoDB快速下載:

MongoDB安裝詳見:

MongoDB的使用:

1、資料庫操作
增:

use quincy
有則切換,無則建立。空庫還有空表沒有內容我們看不到!!!

查:

show dbs
顯示所有資料庫

刪:

use quincy
db.dropDatabase()

2、集合操作
增:

use quincy
db.user.insert({‘name’:’quincy’})
建立集合同時,集合內容增加

查:

show tables
或者
show collections

刪:

db.user.drop()

3、文件操作
增:

3.1 “_id”不指定系統會使用預設的ObjectId,_id插入後不可修改,可刪

關於ObjectId:

MongoDB中儲存的文件必須有一個”_id”鍵。這個鍵的值可以是任意型別,預設是個ObjectId物件。
在一個集合裡,每個文件都有唯一的“_id”,確保集合裡每個文件都能被唯一標識。
不同集合”_id”的值可以重複,但同一集合內”_id”的值必須唯一

1、ObjectId

ObjectId是”_id”的預設型別。因為設計MongoDb的初衷就是用作分散式資料庫,所以能夠在分片環境中生成
唯一的識別符號非常重要,而常規的做法:在多個伺服器上同步自動增加主鍵既費時又費力,這就是MongoDB採用
ObjectId的原因。
ObjectId採用12位元組的儲存空間,是一個由24個十六進位制數字組成的字串
0|1|2|3| 4|5|6| 7|8 9|10|11
時間戳 機器 PID 計數器
如果快速建立多個ObjectId,會發現每次只有最後幾位有變化。另外,中間的幾位數字也會變化(要是在建立過程中停頓幾秒)。
這是ObjectId的建立方式導致的,如上圖

時間戳單位為秒,與隨後5個位元組組合起來,提供了秒級的唯一性。這個4個位元組隱藏了文件的建立時間,絕大多數驅動程式都會提供
一個方法,用於從ObjectId中獲取這些資訊。

因為使用的是當前時間,很多使用者擔心要對伺服器進行時鐘同步。其實沒必要,因為時間戳的實際值並不重要,只要它總是不停增加就好。
接下來3個位元組是所在主機的唯一識別符號。通常是機器主機名的雜湊值。這樣就可以保證不同主機生成不同的ObjectId,不產生衝突

接下來連個位元組確保了在同一臺機器上併發的多個程序產生的ObjectId是唯一的

前9個位元組確保了同一秒鐘不同機器不同程序產生的ObjectId是唯一的。最後3個位元組是一個自動增加的 計數器。確保相同程序的同一秒產生的
ObjectId也是不一樣的。

2、自動生成_id

如果插入文件時沒有”_id”鍵,系統會自幫你建立 一個。可以由MongoDb伺服器來做這件事。
但通常會在客戶端由驅動程式完成。這一做法非常好地體現了MongoDb的哲學:能交給客戶端驅動程式來做的事情就不要交給伺服器來做。
這種理念背後的原因是:即便是像MongoDB這樣擴充套件性非常好的資料庫,擴充套件應用層也要比擴充套件資料庫層容易的多。將工作交給客戶端做就
減輕了資料庫擴充套件的負擔。

單條資料增加:
userinfo = {“name”:”quincy”}
db.user.insert(userinfo)

多條資料增加,注意內部為陣列形式:
db.user.insertMany([userinfo,userinfo,userinfo])

查:

等於:

db.product.find({“location”:”上海”})

不等於:

db.product.find({“loaction”:{“$ne”:”上海”}})

大於(小於):

db.product.find({“_id”:{“$gt”:2}})

and、or、not

兩個條件合在一起,並且的意思(and)
db.user.find({“_id”:{“$gte”:2,”$lte”:5}})
db.user.find({“_id”:{“$gt”:3},”age”:{“$lt”:30}})

or:

db.user.find({“$or”:[{“_id”:{“$gt”:2}},{“name”:”quincy”}]})

取模:

db.user.find({“_id”:{“$mod”:[2,1]}})

not:

db.user.find({“_id”:{“$not”:{“$mod”:[2,1]}}})

成員運算:

db.user.find({“_id”:{“$in”:[1,2,3]}})
db.user.find({“_id”:{“$nin”:[1,2,3]}})

正則匹配:

db.user.find({“_id”:{“$in”:[1,2,3]}})

取出指定欄位,1代表顯示,2代表不顯示

db.user.find({“_id”:3},{“_id”:0,”name”:1,”age”:1})

陣列查詢:

查一個:
db.user.find({“hobbies”:”read”})
查多個:
db.user.find({“hobbies”:{“$all”:[“swim”,”read”]}})
第四個愛好為music的所有人
db.user.find({“hobbies.3”:”music”})
檢視所有人最後2個愛好
db.user.find({},{“hobbies”:{“$slice”:-2},”name”:1})
檢視所有人第二到第三個愛好
db.user.find({},{“hobbies”:{“$slice”:[1,2]}})

格式化程式碼:

db.user.find().pretty()

排序,1代表升序,2代表降序

db.user.find().sort({“name”:1})
分頁:
db.user.find().sort({“name”:”quincy”}).limit(2).skip(2)
查詢一個:
db.user.findOne({“name”:”quincy”})

{key:null}會找出key為null或者沒有key的資料