MongoDB基本操作

數(shù)據(jù)庫基本操作

網(wǎng)易公開課-MongoDB數(shù)據(jù)庫學(xué)習(xí)筆記

# use study胞谈,并不會(huì)創(chuàng)建數(shù)據(jù)庫吏奸,只有在數(shù)據(jù)保存之后才會(huì)創(chuàng)建
>use study
# 創(chuàng)建集合
>db.createCollection("emp")
# 此時(shí)再次查看數(shù)據(jù)庫酝陈,才會(huì)看到study已經(jīng)創(chuàng)建
>show dbs

# 實(shí)際在使用的過程中豺型,不會(huì)特意先創(chuàng)建集合,而是直接在集合中插入數(shù)據(jù)饼齿,mongodb會(huì)自動(dòng)創(chuàng)建
>db.dept.insert({"deptno": 10, "dname": "財(cái)務(wù)部", "loc": "北京"})
# 此時(shí)MongoDB會(huì)自動(dòng)創(chuàng)建一個(gè)dept的集合饲漾,并插入一條數(shù)據(jù)
# MongoDB數(shù)據(jù)庫的集合結(jié)構(gòu)很靈活,無模式集合缕溉。

# 查看集合內(nèi)容
# 語法: db.集合名詞.find({若干條件})
>db.dept.find()
{ "_id" : ObjectId("586a562f87e00ea77b041b67"), "deptno" : 10, "dname" : "財(cái)務(wù)部", "loc" : "北京" }

# ID "時(shí)間戳 + 機(jī)器碼 + PID + 計(jì)數(shù)器"考传,肯定不會(huì)重復(fù)
# 查找某個(gè)具體實(shí)例
>db.dept.find({"_id" : ObjectId("586a57b287e00ea77b041b69")})
>db.dept.findOne()
# 刪除數(shù)據(jù)
# db.集合名詞.remove({條件})
>db.dept.remove({"_id" : ObjectId("586a57b287e00ea77b041b69")})

# 更新數(shù)據(jù)
# db.集合名詞.update({條件}, {更新后的數(shù)據(jù)})
>db.dept.update({"_id" : ObjectId("586a562f87e00ea77b041b67")}, {"loc": "上海"})
# 刪除集合
# db.集合名詞.drop()
db.dept.drop()
# 刪除數(shù)據(jù)庫(刪除當(dāng)前所在的數(shù)據(jù)庫)
db.dropDatabase()

數(shù)據(jù)插入

# 增加單條數(shù)據(jù)
# db.集合.insert({數(shù)據(jù)json})
# 增加多條數(shù)據(jù),數(shù)組形式
# db.集合.insert([{},{}])
# 批量數(shù)據(jù)javascript語法
for (var x = 0; x < 100; x ++) {
    db.infos.insert({"url": "xxx" + x})
}

數(shù)據(jù)查詢

# db.集合名詞.find({查詢條件},{顯示字段})
# {查詢條件}证鸥,json格式
>db.infos.find({"url": "wwww.baidu.com"})
#{顯示字段}:數(shù)據(jù)的投影操作僚楞,需要顯示的字段設(shè)置為1,不顯示的設(shè)置為0
>db.infos.find({},{"_id": 0})
# pretty顯示枉层,格式化的輸出效果
db.infos.find({},{"_id": 0}).pretty()

數(shù)據(jù)集

# 測試數(shù)據(jù)集
>db.students.drop()
>db.students.insert({"name": "張三", "sex": "男", "age": 19, "score": 89, "address": "海淀區(qū)"})
>db.students.insert({"name": "李四", "sex": "女", "age": 20, "score": 59, "address": "朝陽區(qū)"})
>db.students.insert({"name": "王五", "sex": "女", "age": 19, "score": 99, "address": "西城區(qū)"})
>db.students.insert({"name": "趙六", "sex": "男", "age": 20, "score": 100, "address": "東城區(qū)"})
>db.students.insert({"name": "孫七", "sex": "男", "age": 19, "score": 20, "address": "海淀區(qū)"})
>db.students.insert({"name": "王八", "sex": "女", "age": 21, "score": 0, "address": "海淀區(qū)"})
>db.students.insert({"name": "劉九", "sex": "男", "age": 19, "score": 70, "address": "朝陽區(qū)"})
>db.students.insert({"name": "錢十", "sex": "女", "age": 21, "score": 56, "address": "西城區(qū)"})
>db.students.insert({"name": "數(shù)組-A", "sex": "女", "age": 21, "score": 56, "address": "西城區(qū)", "course": ["語文", "數(shù)學(xué)", "英語", "音樂", "政治"]})
>db.students.insert({"name": "數(shù)組-B", "sex": "女", "age": 21, "score": 56, "address": "西城區(qū)", "course": ["語文", "數(shù)學(xué)", "英語"]})
>db.students.insert({"name": "數(shù)組-C", "sex": "女", "age": 21, "score": 56, "address": "西城區(qū)", "course": ["語文", "政治"]})
>db.students.insert({"name": "數(shù)組-D", "sex": "女", "age": 21, "score": 56, "address": "西城區(qū)", "course": ["英語", "音樂", "政治"]})
>db.students.insert({"name": "嵌套-A", "sex": "女", "age": 21, "score": 56, "address": "西城區(qū)", "course": ["英語", "音樂", "政治"], "parents": [{"name": "父親A", "job": "工人"}, {"name": "母親A", "job": "員工"}]})
>db.students.insert({"name": "嵌套-B", "sex": "女", "age": 21, "score": 56, "address": "西城區(qū)", "course": ["英語", "音樂", "政治"], "parents": [{"name": "父親B", "job": "局長"}, {"name": "母親B", "job": "職員"}]})

關(guān)系運(yùn)算

# 支持的關(guān)系操作 等于泉褐,大于($gt), 小于($lt)鸟蜡,大于等于($gte)膜赃,小于等于($lte),不等于($ne)
# 等于查詢
>db.students.find({"name": "張三"}).pretty()
{
    "_id" : ObjectId("586bbc0885913b9e29437679"),
    "name" : "張三",
    "sex" : "男",
    "age" : 19,
    "score" : 89,
    "address" : "海淀區(qū)"
}
# 大于
>db.students.find({"age": {"$gt": 19}}).pretty()
# 大于等于
>db.students.find({"score": {"$gte": 60}}).pretty()
# 不等于
>db.students.find({"name": {"$ne":"張三"}}).pretty()

邏輯運(yùn)算

# 支持的邏輯運(yùn)算 與($and) 或($or) 非($nor)
# 與操作 and連接 查詢19~20歲的學(xué)生
>db.students.find({"age": {"$gte": 19, "$lte": 20}}).pretty()
# 或 or
>db.students.find({"$or": [{"age": {"$gt": 19}}, {"score": {"$gt": 90}}]}).pretty()
# 非
>db.students.find({"$nor": [{"age": {"$gt": 19}}, {"score": {"$gt": 90}}]}).pretty()

求模運(yùn)算

> db.students.find({"age": {"$mod" : [20, 1]}}).pretty()
{
    "_id" : ObjectId("586bbc0885913b9e2943767e"),
    "name" : "王八",
    "sex" : "女",
    "age" : 21,
    "score" : 0,
    "address" : "海淀區(qū)"
}
{
    "_id" : ObjectId("586bbc0985913b9e29437680"),
    "name" : "錢十",
    "sex" : "女",
    "age" : 21,
    "score" : 56,
    "address" : "西城區(qū)"
}

范圍查詢

# $in , $nin
>db.students.find({"name": {"$in": ["張三", "李四","王五"]}}).pretty()
>db.students.find({"name": {"$nin": ["張三", "李四","王五"]}}).pretty()

數(shù)組運(yùn)算

# $all, $size, $slice, $elemMatch
# 所有學(xué)生信息里面揉忘,包含語文财剖,數(shù)學(xué)
>db.students.find({"course": {"$all": ["語文", "數(shù)學(xué)"]}}).pretty()
>db.students.find({"address": {"$all": ["海淀區(qū)"]}}).pretty()
# 數(shù)組下標(biāo)查詢
>db.students.find({"course.1": "數(shù)學(xué)"}).pretty()
#只參加兩門課程
>db.students.find({"course": {"$size": 2}}).pretty()
# 只顯示前兩門
>db.students.find({"age": 21}, {"course": {"$slice": 2}}).pretty()
>db.students.find({"age": 21}, {"course": {"$slice": -2}}).pretty()
# $slice: [start_index, length]
>db.students.find({"age": 21}, {"course": {"$slice": [1, 2]}}).pretty()
# 嵌套符合
>db.students.find({"$and": [{"age": {"$gt": 20}}, {"parents": {"$elemMatch": {"job": "局長"}}}]}).pretty()

是否存在

# exists, 數(shù)據(jù)過濾
> db.students.find({"parents": {"$exists": true}}).pretty()

條件過濾

# 能利用JavaScript,但是不方便使用索引
>db.students.find({"$where": "this.age > 20"}).pretty()
>db.students.find("this.age > 20").pretty()
>db.students.find(function() {return this.age > 20 && this.age <= 21}).pretty()

正則運(yùn)算

#模糊查詢癌淮,必須使用正則表達(dá)式
#Perl兼容的正則表達(dá)式
#{key: 正則標(biāo)記}
# {key: {"$regex": 正則標(biāo)記, "$options": 選項(xiàng)}}, 
# options: "i": 忽略字母大小寫  "m" 多行查找 "x": 空白字符串除了被轉(zhuǎn)義的或在字符串中意外的完全被忽略 "s": 匹配所有字符(圓點(diǎn).)沦补,包括換行內(nèi)容
>db.students.find({"name":  /數(shù)組/}).pretty()
>db.students.find({"name":  /a/i}).pretty()  # 不區(qū)分大小寫
>db.students.find({"name":  {"$regex": /a/i}}).pretty()
>db.students.find({"course":  /語/}).pretty()

數(shù)據(jù)排序

# sort()函數(shù) 升序(1) 降序(-1)
>db.students.find().sort({"score": 1}).pretty()
>db.students.find().sort({"score": -1}).pretty()
# nature 自然排序
>db.students.find().sort({"$nature": 1}).pretty()

數(shù)據(jù)分頁

# skip(n)跨過多少數(shù)據(jù)
# limit(n)取多少數(shù)據(jù)
>db.students.find().skip(2).limit(5).pretty()

數(shù)據(jù)更新操作

# mongodb更新非常麻煩乳蓄,最好的做法是:先刪后重新插入

數(shù)據(jù)刪除

# remove()函數(shù)
# db.集合.remove()
>db.students.remove({})
>db.students.remove({"name": /數(shù)組/})
>db.students.remove({"name": /數(shù)組/}, 1)  # 只刪除符合條件的1個(gè)
>db.students.drop()  # 刪除結(jié)婚

游標(biāo)

# hasNext() next()
>var cursor = db.students.find()
>cursor.hasNext()
>cursor.next()
while(cursor.hasNext()) {
    var doc = cursor.next()
    printjson(doc)
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市夕膀,隨后出現(xiàn)的幾起案子虚倒,更是在濱河造成了極大的恐慌,老刑警劉巖产舞,帶你破解...
    沈念sama閱讀 211,123評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件魂奥,死亡現(xiàn)場離奇詭異,居然都是意外死亡易猫,警方通過查閱死者的電腦和手機(jī)耻煤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人哈蝇,你說我怎么就攤上這事棺妓。” “怎么了炮赦?”我有些...
    開封第一講書人閱讀 156,723評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵怜跑,是天一觀的道長。 經(jīng)常有香客問我吠勘,道長性芬,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,357評(píng)論 1 283
  • 正文 為了忘掉前任剧防,我火速辦了婚禮植锉,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘诵姜。我一直安慰自己汽煮,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評(píng)論 5 384
  • 文/花漫 我一把揭開白布棚唆。 她就那樣靜靜地躺著暇赤,像睡著了一般。 火紅的嫁衣襯著肌膚如雪宵凌。 梳的紋絲不亂的頭發(fā)上鞋囊,一...
    開封第一講書人閱讀 49,760評(píng)論 1 289
  • 那天,我揣著相機(jī)與錄音瞎惫,去河邊找鬼溜腐。 笑死,一個(gè)胖子當(dāng)著我的面吹牛瓜喇,可吹牛的內(nèi)容都是我干的挺益。 我是一名探鬼主播,決...
    沈念sama閱讀 38,904評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼乘寒,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼望众!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起伞辛,我...
    開封第一講書人閱讀 37,672評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤烂翰,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后蚤氏,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體甘耿,經(jīng)...
    沈念sama閱讀 44,118評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評(píng)論 2 325
  • 正文 我和宋清朗相戀三年竿滨,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了佳恬。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片捏境。...
    茶點(diǎn)故事閱讀 38,599評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖殿怜,靈堂內(nèi)的尸體忽然破棺而出典蝌,到底是詐尸還是另有隱情,我是刑警寧澤头谜,帶...
    沈念sama閱讀 34,264評(píng)論 4 328
  • 正文 年R本政府宣布骏掀,位于F島的核電站,受9級(jí)特大地震影響柱告,放射性物質(zhì)發(fā)生泄漏截驮。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評(píng)論 3 312
  • 文/蒙蒙 一际度、第九天 我趴在偏房一處隱蔽的房頂上張望葵袭。 院中可真熱鬧,春花似錦乖菱、人聲如沸坡锡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鹉勒。三九已至,卻和暖如春吵取,著一層夾襖步出監(jiān)牢的瞬間禽额,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評(píng)論 1 264
  • 我被黑心中介騙來泰國打工皮官, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留脯倒,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,286評(píng)論 2 360
  • 正文 我出身青樓捺氢,卻偏偏與公主長得像藻丢,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子摄乒,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評(píng)論 2 348

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

  • 安裝 配置環(huán)境 mongodb安裝完畢后郁岩,默認(rèn)安裝路徑在/usr/local/Cellar/mongodb/3.4...
    bd4d0d78f248閱讀 5,737評(píng)論 0 53
  • 創(chuàng)建數(shù)據(jù)庫 打印數(shù)據(jù)庫列表 ** MongoDB 中默認(rèn)的數(shù)據(jù)庫為 test,如果你沒有創(chuàng)建新的數(shù)據(jù)庫缺狠,集合將存放...
    陳小陌丿閱讀 266評(píng)論 0 0
  • 原文鏈接 安裝/卸載MongoDB 查看MongoDB版本信息 開啟/關(guān)閉MongoDB服務(wù) 查看MongoDB是...
    sssnowyue閱讀 239評(píng)論 0 0
  • 系統(tǒng)相關(guān) 安裝MongoDB 啟動(dòng)MongoDB服務(wù)器 連接MongoDB服務(wù)器,啟動(dòng)客戶端 數(shù)據(jù)庫相關(guān) 創(chuàng)建數(shù)據(jù)...
    DongGuangqing閱讀 245評(píng)論 0 0
  • 創(chuàng)建數(shù)據(jù)庫 創(chuàng)建數(shù)據(jù)庫 查看數(shù)據(jù)庫 新創(chuàng)建的數(shù)據(jù)庫不不在數(shù)據(jù)庫的列表中,要顯示它,需要插入一些數(shù)據(jù) MongoDB...
    NoFacePeace閱讀 110評(píng)論 0 0