五一第一天,祝自己生日快樂的同時样傍,中午閑來無事横缔,打開了硬盤上早已下載好的大地的免費課程 ,從 mongodb 的安裝衫哥、環(huán)境配置茎刚,再到簡單的在命令行中的 CRUD 操作,算是有了個初體驗撤逢。
這里還是要感謝大地老師膛锭,慷慨的提供了夠我看很久的免費視頻,所以也愿意貼個鏈接表示感謝蚊荣,最初是在 nodejs 中文社區(qū)看到的推廣地址泉沾。
繼續(xù)回到 mongodb,官網(wǎng)下載后妇押,windows 中要配置環(huán)境變量,將 mongodb 的安裝路徑(跟著官網(wǎng)的安裝步驟姓迅,默認安裝到 c 盤就行了)敲霍,一直找到 /bin
目錄丁存, 然后復(fù)制路徑,設(shè)置到 windows 中的 path
全局環(huán)境變量中就行解寝。
當然扩然,由于目前只學(xué)了在 CMD 中進行 CRUD聋伦,所以簡單記錄一下界睁,具體的語法自己看視頻,或者看文檔就行:
增 Create
-
use some_database_name
還不算創(chuàng)建數(shù)據(jù)庫翻斟,只有真正向某個集合(表)中插入了數(shù)據(jù)之后,才會創(chuàng)建數(shù)據(jù)庫 some_database_name:
db.user.insert({"name": "xiaoming", "age": 25})
查 Retrieve
- 終端中輸入
db
说铃,可以查看當前處于哪個數(shù)據(jù)庫中,輸入show dbs
腻扇,查看當前創(chuàng)建了哪些數(shù)據(jù)庫债热,輸入show collections
查看當前數(shù)據(jù)庫有哪些集合(表)幼苛。
假如查詢分頁數(shù)據(jù),比如age
為 25 的記錄蚓峦,每一次返回10條,同時跳過之前的數(shù)據(jù)記錄暑椰,這時候下面兩種寫法效果一樣霍转,我的解釋是,skip
優(yōu)先級更高一汽,即兩種寫法都會先跳過10條數(shù)據(jù)避消,然后才會返回limit
指定數(shù)目的數(shù)據(jù):
db.user.find({"age": 25}).skip(10).limit(10)
// 反過來想想,先返回10條數(shù)據(jù)召夹,然后又跳過了10條數(shù)據(jù)岩喷,那豈不是返回空进泼,所以是不可能的
db.user.find({"age": 25}).limit(10).skip(10)
- 如果對返回數(shù)據(jù)進行
sort
排序呢亲怠?其實這里的鏈式調(diào)用似乎有些誤導(dǎo)性,據(jù)我測試间景,實際上是對find
出來的結(jié)果鲸阔,首先就進行了sort
排序偷霉,然后是skip
,最后才是limit
(邏輯順序上是這樣褐筛,具體 mongodb 內(nèi)部如何處理类少,不詳):
db.user.find({"age": 25}).limit(10).skip(10).sort(10)
改 Update
- 修改數(shù)據(jù)時注意是根據(jù)第一個參數(shù)進行查找,然后根據(jù)提供的第二個參數(shù)渔扎,修改查找到的第一項返回結(jié)果硫狞。如果指定了
$set
,那么會根據(jù)$set
的屬性和查到到的結(jié)果進行比對,如下所示残吩,name
會更新為xiaoming666
财忽,同時會增加age
字段:
db.user.find() // 假設(shè)返回如下:
{ "_id" : ObjectId("5cc952aadaf6816433a1a06a"), "name": "xiaoming", "sex": "男" }
// 然后更新:
db.user.update({"name": "xiaoming"}, {$set: {"name": "xiaoming666", "age": 18}})
// 此時結(jié)果為:
{ "_id" : ObjectId("5cc952aadaf6816433a1a06a"), "name": "xiaoming666", "sex": "男", "age": 18 }
那如果不指定 $set
屬性,則會用update
時的第二個參數(shù)世剖,覆蓋根據(jù)第一個參數(shù)查找到的第一項數(shù)據(jù):
// 接著上面進一步操作:
db.user.update({"name": "xiaoming"}, {})
// 可以看到完全被替換了定罢,只剩下自帶的 "_id" 字段
{ "_id" : ObjectId("5cc952aadaf6816433a1a06a") }
刪 Delete
- 刪除數(shù)據(jù)時,如果刪除了數(shù)據(jù)庫中所有的集合(表)旁瘫,那么數(shù)據(jù)庫也會自動被刪除祖凫,或者直接刪除數(shù)據(jù)庫:
db.some_collection_name.drop() // 1. 刪除集合(表)
db.dropDatabase() // 2. 直接刪除當前正在 use 的數(shù)據(jù)庫
使用 remove
刪除數(shù)據(jù)時,如果傳入了 {}
會刪除該集合下的所有數(shù)據(jù)酬凳,否則只會刪除根據(jù)參數(shù)條件匹配到的數(shù)據(jù)惠况,也可以傳入第二個可選參數(shù),指定 justOne
字段宁仔,表示只刪除匹配項的第一條數(shù)據(jù):
db.user.remove({})
db.user.remove({"name": "xiaoming"}) // 刪除 user 集合中所有 name 是 xiaoming 的數(shù)據(jù)
db.user.remove({"name": "xiaoming"}, {"justOne": true}) // 只刪除匹配項的第一條
個人學(xué)習(xí)中的小記錄稠屠,不定期更新/更正,方便日后自我查閱翎苫,理解粗淺权埠,如有明顯誤導(dǎo),抱歉望斧正煎谍。
參考連接:
1. 大地的免費課程