MongoDB的操作

mongoDB的概念

  1. MongoDB 是由C++語言編寫的煮寡,是一個(gè)基于分布式文件存儲的開源數(shù)據(jù)庫系統(tǒng)。在高負(fù)載的情況下犀呼,添加更多的節(jié)點(diǎn)幸撕,可以保證服務(wù)器性能。
  2. MongoDB 旨在為WEB應(yīng)用提供可擴(kuò)展的高性能數(shù)據(jù)存儲解決方案外臂。
  3. MongoDB 將數(shù)據(jù)存儲為一個(gè)文檔坐儿,數(shù)據(jù)結(jié)構(gòu)由鍵值(key=>value)對組成。MongoDB 文檔類似于 JSON 對象宋光。字段值可以包含其他文檔貌矿,數(shù)組及文檔數(shù)組。

mongoDB的安裝與啟動

  1. 安裝mongoDB
brew install mongodb
  1. 新建文件夾 (名字自取) 這里以database
  2. 啟動mongodb服務(wù)器
 mongod --dbpath=文件路徑
  1. 進(jìn)入服務(wù)器環(huán)境
mongo
  1. 查看數(shù)據(jù)庫
show dbs

初始數(shù)據(jù)庫的狀態(tài)


19DB3BBEC6E07E186364E463F476330C.png

mongoDB的操作

操作mongo基礎(chǔ)

下面是數(shù)據(jù)庫與mongoDB的對比圖跃须,構(gòu)成有相似的站叼,也有不同的


6256A0FE1A648795B3EF021425581CB0.png
  1. 創(chuàng)建數(shù)據(jù)庫
    先use 要創(chuàng)建的數(shù)據(jù)庫名娃兽,如果數(shù)據(jù)庫名已存在菇民,則切換到此數(shù)據(jù)庫中;如不存在投储,則創(chuàng)建數(shù)據(jù)庫
// 創(chuàng)建一個(gè)users數(shù)據(jù)庫
user users
  1. 創(chuàng)建一個(gè)數(shù)據(jù)庫集合person,并添加數(shù)據(jù)
db.person.insert({name:"張三"第练,age:20})
  1. 查看當(dāng)前使用的數(shù)據(jù)庫
db
  1. 刪除數(shù)據(jù)庫
db.dropDatabase() 
  1. 斷開連接
exit

操作集合

  1. 查看當(dāng)前數(shù)據(jù)庫下有哪些集合
show collections
  1. 創(chuàng)建集合
db.createCollection(collection_Name)
  1. 刪除集合
db.collection_Name.drop()

文檔操作

這里以person集合為例
1.insert 添加數(shù)據(jù):
db.COLLECTIONNAME.insert({name:"張三",age:20})

db.person.insert({name:'馬云',age:37})
  1. save 添加與更新:
    如果通過id能找到就是更新,如果找不到就是添加玛荞;
  • 添加
db.person.save({name:"李四"})
  • 更新
db.person.save({'_id':ObjectId("5a67f5221df8d5687e847094"),name:'王五',age:21}
  1. update 更新:(默認(rèn)更新符合條件的第一條)
    db.COLLECTIONNAME.update({條件},{更新的內(nèi)容},{配置項(xiàng)(如果要更新能夠匹配的多個(gè)選項(xiàng) multi:true)})
    下列更新名字叫馬云的年齡為42
db.person.update({name:"馬云"},{$set:{age:42}})

如果表中有多個(gè)馬云娇掏,若想更新所有名字叫馬云的年齡,就需要使用到第三個(gè)參數(shù)multi

db.person.update({name:"馬云"},{$set:{age:18}},{multi:true})
  1. remove 刪除:(默認(rèn)刪除符合條件的所有數(shù)據(jù))
    db.COLLECTIONNAME.remove({name:'張三'},{配置項(xiàng)(可選:justOne)});
    刪除名字叫馬云的一條數(shù)據(jù)勋眯,需配置第三個(gè)參數(shù)justOne
db.person.remove({name:'馬云'},{justOne:true})
  1. find數(shù)據(jù)的查詢
  • 所有數(shù)據(jù)的查詢
    db.COLLECTIONNAME.find()
db.person.find()

集合person中的字段


860A4BC9ACFD105C617F75ED5E26A0DA.png
  • find({條件},{字段})
    條件:大于gt 小于lt 大于等于gte 小于等于 lte 不等于 ne婴梧;等于就直接使用冒號
  1. 第一個(gè)參數(shù):
    查詢大于28的數(shù)據(jù)
db.person.find({age:{$gt:28}})

查詢年齡等于30的數(shù)據(jù)

db.person.find({age:30})
  1. 第二個(gè)參數(shù):字段 如:{name:1,age:1}
    查詢年齡大于28的所有名字
db.person.find({age:{$gt:28}},{name:1})

查詢結(jié)果中除了id便只有name一個(gè)字段,第二個(gè)參數(shù)限定需要查詢的字段


CFC06F0A971EB48185C4778065599FEE.png
  • like 關(guān)鍵字
    在mongoDB的操作中比數(shù)據(jù)操作更加靈活客蹋,他可以用正則表達(dá)式查詢各種條件的數(shù)據(jù)
    查詢以"馬"開頭的數(shù)據(jù) db.COLLECTIONNAME.find({name:/^馬/})
db.person.find({name:/^馬/})
  • 并且關(guān)系:直接寫在對象里塞蹭,逗號隔開
    查詢數(shù)據(jù)名字是"馬云"并且年齡是48;
db.person.find({name:'馬云',age:40})
  • $or 或者關(guān)系
    查詢年齡等于48或者28
db.person.find({$or:[{age:30},{age:40}]})
  • 分頁:關(guān)鍵字skip和limit
    跳過兩條從第三條開始查詢兩條數(shù)據(jù)
db.person.find().skip(2).limit(2)
  • 排序: 關(guān)鍵字sort
    參數(shù):1代表正序;-1代表倒序
    以年齡正序排序
db.person.find().sort({age:1})
  • 查詢數(shù)量: 關(guān)鍵字count
db.person.find().count();

上面這些的查詢的命令單個(gè)看起來還挺容易的讶坯,但混合使用還是很容易出錯(cuò)的番电,這就需要大家細(xì)心的去寫了。
最后寫個(gè)簡單的綜合查詢:
查詢所有姓李或者是姓王的;按照年齡倒序排列漱办;只查詢結(jié)果的2條數(shù)據(jù)

db.person.find({$or:[{name:/^李/},{name:/^王/}]}).sort({age:-1}).skip(0).limit(2)

結(jié)束語

MongoDB的擴(kuò)展性好这刷,并且支持多種匯編語言,由于使用JSON形式的存儲娩井,使之更加容易查詢文檔中的對象或數(shù)組暇屋。好用的不要不要的。洞辣。率碾。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市屋彪,隨后出現(xiàn)的幾起案子所宰,更是在濱河造成了極大的恐慌,老刑警劉巖畜挥,帶你破解...
    沈念sama閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件仔粥,死亡現(xiàn)場離奇詭異,居然都是意外死亡蟹但,警方通過查閱死者的電腦和手機(jī)躯泰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來华糖,“玉大人麦向,你說我怎么就攤上這事】筒妫” “怎么了诵竭?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長兼搏。 經(jīng)常有香客問我卵慰,道長,這世上最難降的妖魔是什么佛呻? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任裳朋,我火速辦了婚禮,結(jié)果婚禮上吓著,老公的妹妹穿的比我還像新娘鲤嫡。我一直安慰自己,他們只是感情好绑莺,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布暖眼。 她就那樣靜靜地躺著,像睡著了一般紊撕。 火紅的嫁衣襯著肌膚如雪罢荡。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天,我揣著相機(jī)與錄音区赵,去河邊找鬼惭缰。 笑死,一個(gè)胖子當(dāng)著我的面吹牛笼才,可吹牛的內(nèi)容都是我干的漱受。 我是一名探鬼主播,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼骡送,長吁一口氣:“原來是場噩夢啊……” “哼昂羡!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起摔踱,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤虐先,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后派敷,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蛹批,經(jīng)...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年篮愉,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了腐芍。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,569評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡试躏,死狀恐怖猪勇,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情颠蕴,我是刑警寧澤泣刹,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站裁替,受9級特大地震影響项玛,放射性物質(zhì)發(fā)生泄漏貌笨。R本人自食惡果不足惜弱判,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望锥惋。 院中可真熱鬧昌腰,春花似錦、人聲如沸膀跌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽捅伤。三九已至劫流,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背祠汇。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工仍秤, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人可很。 一個(gè)月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓诗力,卻偏偏與公主長得像,于是被迫代替她去往敵國和親我抠。 傳聞我的和親對象是個(gè)殘疾皇子苇本,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,446評論 2 348

推薦閱讀更多精彩內(nèi)容