mongodb簡(jiǎn)明教程

基本概念

  • Document
    MongoDB中數(shù)據(jù)的基本單元遭商,非常類似于關(guān)系型數(shù)據(jù)系統(tǒng)中的行
  • Collection
    可以看成一個(gè)擁有動(dòng)態(tài)模式的表览绿,一個(gè)Collection里面的Document可以是各式各樣的
  • Database
    一個(gè)MongoDB實(shí)例可以擁有多個(gè)相互獨(dú)立的Database茉盏,每一個(gè)Database都擁有自己的集合
  • Mongo Shell
    MongoDB自帶的一個(gè)簡(jiǎn)單但功能強(qiáng)大的JavaScript shell确垫,可用于管理MongoDB的實(shí)例或數(shù)據(jù)操作

shell CRUD操作

創(chuàng)建

> use test
switched to db test
> post ={"title":"My Blog Post",
... "content":"Here's my blog post.",
...  "date":new Date()
...  }
{
    "title" : "My Blog Post",
    "content" : "Here's my blog post.",
    "date" : ISODate("2017-05-22T07:29:26.085Z")
}
//post是一個(gè)有效的文檔樱蛤,下面將其插入數(shù)據(jù)庫
> db.blog.insert(post)
WriteResult({ "nInserted" : 1 })
//查詢blog Collection,發(fā)現(xiàn)blog文檔已經(jīng)插入
> db.blog.find()
{ "_id" : ObjectId("5922935f01d2563bad1ad3f8"), "title" : "My Blog Post", "content" : "Here's my blog post.", "date" : ISODate("2017-05-22T07:29:26.085Z") }
>

讀取

find和findOne可以接受一個(gè)查詢文檔作為限定文件翅帜。findOne代表只查看一個(gè)文檔。

> db.blog.findOne()
{
    "_id" : ObjectId("5922935f01d2563bad1ad3f8"),
    "title" : "My Blog Post",
    "content" : "Here's my blog post.",
    "date" : ISODate("2017-05-22T07:29:26.085Z")
}

更新

> post.comments = []
[ ]
> db.blog.update({"title" : "My Blog Post"},post)
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.blog.find()
{ "_id" : ObjectId("5922935f01d2563bad1ad3f8"), "title" : "My Blog Post", "content" : "Here's my blog post.", "date" : ISODate("2017-05-22T07:29:26.085Z"), "comments" : [ ] }

update接受(至少)兩個(gè)參數(shù)命满,第一個(gè)是限定條件(用于匹配待更新的文檔)涝滴,第二個(gè)是新的文檔

刪除

> db.blog.remove({"title" : "My Blog Post"})
WriteResult({ "nRemoved" : 1 })
> db.blog.find()
> 

remove可將數(shù)據(jù)庫中的文檔永久刪除。如果沒有傳入?yún)?shù)胶台,將會(huì)刪除指定Collection中的全部文檔歼疮,可以接受一個(gè)作為限定條件的文檔為參數(shù)。

查詢

//指定需要返回的鍵
> db.blog.find({},{"username":1})
{ "_id" : ObjectId("5922c9fb01d2563bad1ad3fb"), "username" : "Joe" }
//剔除查詢結(jié)果中某些鍵
> db.blog.find({},{"username":0,"_id":0})
{ "email" : "joe@example.com", "address" : "Beijing" }

//查詢條件 "$lt" "$lte" "$gt" "gte"
> db.users.find({"registered":{"$lt":new Date("01/01/2018")}})
{ "_id" : ObjectId("5922cb0601d2563bad1ad3fc"), "name" : "test", "email" : "test@example.com", "age" : 30, "registered" : ISODate("2017-05-22T11:26:45.167Z") }

//OR查詢 "$in" "$or"
> db.raffle.find({"ticket_no":{"$in":[725,453,380]}})
> db.raffle.find({"$or":[{"ticket_no":735},{"winner":true}]})

// $not
> db.users.find({"id_num":{"$not":{"$mod":[5,1]}}})

//特定類型查詢 null
> db.c.find({"y":null}) //此時(shí)返回了不含y鍵的document
{ "_id" : ObjectId("5922cdfd01d2563bad1ad3ff"), "y" : null }
{ "_id" : ObjectId("5922ce1e01d2563bad1ad400"), "z" : 1 }

> db.c.find({"y":{"$in":[null],"$exists":true}}) //因?yàn)闆]有$eq,采用$in操作符
{ "_id" : ObjectId("5922cdfd01d2563bad1ad3ff"), "y" : null }

//正則
> db.users.find({"name":/Test/i})
{ "_id" : ObjectId("5922cb0601d2563bad1ad3fc"), "name" : "test", "email" : "test@example.com", "age" : 30, "registered" : ISODate("2017-05-22T11:26:45.167Z") }

//查詢數(shù)組(與查詢標(biāo)量值一樣)
> db.food.insert({"fruit":["apple","banana"]})
WriteResult({ "nInserted" : 1 })
> db.food.find({"fruit":"banana"})
{ "_id" : ObjectId("5922cf2d01d2563bad1ad401"), "fruit" : [ "apple", "banana" ] }

//查詢數(shù)組 $all 
> db.food.find({"fruit":{$all:["banana","apple"]}}) //$all對(duì)應(yīng)數(shù)組诈唬,順序無關(guān)
{ "_id" : ObjectId("5922cf2d01d2563bad1ad401"), "fruit" : [ "apple", "banana" ] }

//精確匹配
> db.food.find()
{ "_id" : ObjectId("5922cf2d01d2563bad1ad401"), "fruit" : [ "apple", "banana" ] }
> db.food.find({"fruit":["banana","apple"]})

//查詢數(shù)組 $size
> db.food.find({"fruit":{"$size":2}})
{ "_id" : ObjectId("5922cf2d01d2563bad1ad401"), "fruit" : [ "apple", "banana" ] }

//查詢數(shù)組 $slice
> db.blog.posts.find()
{ "_id" : ObjectId("5922d14801d2563bad1ad402"), "comments" : [ "d", "dadfs", "ddd", "good" ], "title" : "Nice Title" }
{ "_id" : ObjectId("5922d1d501d2563bad1ad403"), "criteria" : { "comments" : [ "d", "dadfs", "ddd", "good" ] } }
> db.blog.posts.findOne({},{"comments":{"$slice":2}})  //find第二個(gè)參數(shù)可選(可以指定需要返回的鍵)韩脏,通過$slice操作可以返回某個(gè)鍵匹配的數(shù)組元素子集
{
    "_id" : ObjectId("5922d14801d2563bad1ad402"),
    "comments" : [
        "d",
        "dadfs"
    ],
    "title" : "Nice Title"
}
//指定數(shù)組區(qū)間
> db.blog.posts.findOne({},{"comments":{"$slice":[1,3]}})
{
    "_id" : ObjectId("5922d14801d2563bad1ad402"),
    "comments" : [
        "dadfs",
        "ddd",
        "good"
    ],
    "title" : "Nice Title"

//查詢內(nèi)嵌文檔
{
    "content" : "dfadsf",
    "comments" : [
        {
            "author" : "joe",
            "score" : 3,
            "comment" : "nice post"
        },
        {
            "author" : "mary",
            "score" : 5,
            "comment" : "terrible post"
        }
    ]
}
> db.blog.insert(a)
WriteResult({ "nInserted" : 1 })
> db.blog.find({"comments":{"author":"joe","score":{"$gte":5}}}) //匹配為空,因?yàn)閮?nèi)嵌文檔的匹配铸磅,必須要整個(gè)文檔完全匹配
> db.blog.find({"comments":{"author":"joe","score":3,"comment":"nice post"}})
{ "_id" : ObjectId("5922d3d001d2563bad1ad404"), "content" : "dfadsf", "comments" : [ { "author" : "joe", "score" : 3, "comment" : "nice post" }, { "author" : "mary", "score" : 5, "comment" : "terrible post" } ] }

//使用$eleMatch匹配內(nèi)嵌文檔
> db.blog.find({"comments":{"$elemMatch":{"author":"joe","score":{"$gte":1}}}})
{ "_id" : ObjectId("5922d3d001d2563bad1ad404"), "content" : "dfadsf", "comments" : [ { "author" : "joe", "score" : 3, "comment" : "nice post" }, { "author" : "mary", "score" : 5, "comment" : "terrible post" } ] }

//limit skip sort
db.c.find().limit(3) //返回?cái)?shù)量上限
db.c.find().skip(3)
db.c.find().sort({username:1,age:-1}) //1升序 -1降序


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末赡矢,一起剝皮案震驚了整個(gè)濱河市杭朱,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌吹散,老刑警劉巖弧械,帶你破解...
    沈念sama閱讀 219,366評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異空民,居然都是意外死亡刃唐,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門袭景,熙熙樓的掌柜王于貴愁眉苦臉地迎上來唁桩,“玉大人,你說我怎么就攤上這事耸棒』脑瑁” “怎么了?”我有些...
    開封第一講書人閱讀 165,689評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵与殃,是天一觀的道長单山。 經(jīng)常有香客問我,道長幅疼,這世上最難降的妖魔是什么米奸? 我笑而不...
    開封第一講書人閱讀 58,925評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮爽篷,結(jié)果婚禮上悴晰,老公的妹妹穿的比我還像新娘。我一直安慰自己逐工,他們只是感情好铡溪,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,942評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著泪喊,像睡著了一般棕硫。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上袒啼,一...
    開封第一講書人閱讀 51,727評(píng)論 1 305
  • 那天哈扮,我揣著相機(jī)與錄音,去河邊找鬼蚓再。 笑死滑肉,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的摘仅。 我是一名探鬼主播靶庙,決...
    沈念sama閱讀 40,447評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼实檀!你這毒婦竟也來了惶洲?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,349評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤膳犹,失蹤者是張志新(化名)和其女友劉穎恬吕,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體须床,經(jīng)...
    沈念sama閱讀 45,820評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡铐料,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,990評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了豺旬。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片钠惩。...
    茶點(diǎn)故事閱讀 40,127評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖族阅,靈堂內(nèi)的尸體忽然破棺而出篓跛,到底是詐尸還是另有隱情,我是刑警寧澤坦刀,帶...
    沈念sama閱讀 35,812評(píng)論 5 346
  • 正文 年R本政府宣布愧沟,位于F島的核電站,受9級(jí)特大地震影響鲤遥,放射性物質(zhì)發(fā)生泄漏沐寺。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,471評(píng)論 3 331
  • 文/蒙蒙 一盖奈、第九天 我趴在偏房一處隱蔽的房頂上張望混坞。 院中可真熱鬧,春花似錦钢坦、人聲如沸究孕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蚊俺。三九已至,卻和暖如春逛万,著一層夾襖步出監(jiān)牢的瞬間泳猬,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評(píng)論 1 272
  • 我被黑心中介騙來泰國打工宇植, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留得封,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,388評(píng)論 3 373
  • 正文 我出身青樓指郁,卻偏偏與公主長得像忙上,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子闲坎,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,066評(píng)論 2 355

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