mongodb 3.2 知識簡記-基礎知識和基本操作

基礎

  • use db 選擇數據庫
  • 創(chuàng)建數據庫崭歧。當數據庫不存在時祈匙,第一次使用并且存數數據時魏保,創(chuàng)建數據庫澡为。如

use myDb
db.myNewCollection1.insert({value: 10})
創(chuàng)建數據庫myDb, 創(chuàng)建myNewCollection1
注意: mongodb中的collection類似于關系數據庫中的table,通常情況下不需要使用db.createCollection()顯示的構建collection

  • 限制集景埃。官方文檔中給的例子說明是用于log記錄媒至,個人理解:主要目的是限定存儲空間的數據集,當文檔數據超過指定空間或指定文檔最大數之后谷徙,刪除最老的數據拒啰。
  • _id. 每個document都存在一個_id, 必須保持每個document的_id唯一并且不可更改,個人理解:最好是在增加document時完慧,用一個_id生成器生成_id谋旦,確保每個_id唯一。(糾正想法:又查看了_id設計思路屈尼,發(fā)現自己的思路是錯的册着,mongodb將_id設計成12字節(jié)是有道理的,4字節(jié)時間戳+3字節(jié)機器碼+2字節(jié)PID+3字節(jié)計數器脾歧,保證分布式系統(tǒng)中的每個_id值唯一甲捏,默認情況下,用默認的生成的_id就ok了)

常見操作

CRUD

create操作

  • db.collection.insert()
  • db.collection.insertOne()
  • db.collection.insertMany()

query操作

查詢操作是最常用的操作鞭执,其一般形式為:

db.collection.find(<query filter>, <projection>)
query filter表示查詢條件司顿,projection表示查詢返回的元素

eg: db.user.find({}) === db.user.find()
以下是例子(摘自官方文檔

db.users.find( { status: "A" } )
db.users.find( { status: { $in: [ "P", "D" ] } } )
db.users.find( { status: "A", age: { $lt: 30 } } )
db.users.find( { $or: [ { status: "A" }, { age: { $lt: 30 } } ] })
db.users.find( { status: "A", $or: [ { age: { $lt: 30 } }, { type: 1 } ] })
db.users.find( { favorites: { artist: "Picasso", food: "pizza" } } )
db.users.find( { "favorites.artist": "Picasso" } )

db.users.find( { badges: [ "blue", "black" ] } )// 數組完全匹配
db.users.find( { badges: "black" } ) // 數組中存在一個為"black"的元素
db.users.find( { "badges.0": "black" } )// 數組的第一個元素為“black”
db.users.find( { finished: { $elemMatch: { $gt: 15, $lt: 20 } } } )// 只要數組中存在某個元素滿足所有條件
db.users.find( { finished: { $gt: 15, $lt: 20 } } ) // 表示finish數組中的所有元素必須滿足其中的某個條件,并且條件組合中的每個條件在數組中必然存在某個元素滿足
db.users.find( { 'points.0.points': { $lte: 55 } } )//數組中的精確匹配兄纺,在明確知道數組的順序時使用比較合適
db.users.find( { 'points.points': { $lte: 55 } } )// 在不清楚數組順序時使用
db.users.find( { points: { $elemMatch: { points: { $lte: 70 }, bonus: 20 } } } )// 至少有一個元素滿足復合條件
db.users.find( { "points.points": { $lte: 70 }, "points.bonus": 20 } )

projection表示返回的元素大溜,通常,其說明為:

{ field1: <value>, field2: <value> ... }
value值可為0或1估脆,當為0或false時表示返回值不出現钦奋,當為1或true時表示返回值出現

在查詢中一個不可忽略的問題是關于null,如下面這個例子

db.users.find( { name: null } ) // 查詢結果既包括name值為null的document,也包括不存在name屬性的document锨苏,容易造成誤解疙教,為了應對這種情況,有兩個方法:

  • db.users.find( { name : { $type: 10 } } ) // 精確表示name為null

  • db.users.find( { name : { $exists: false } } ) // 精確表示不存在name屬性的document

update

這一操作相對比較簡單伞租,主要有以下集中用法贞谓。(注:upset選項)

db.collection.update()
db.collection.updateOne()
db.collection.updateMany()
db.collection.replaceOne()

delete

刪除操作與update有些類似,主要的用法:

db.collection.remove()
db.collection.deleteOne()
db.collection.deleteMany()

bulk操作

bulk操作用于批量(大量)執(zhí)行一系列的操作葵诈,提供的主要方法是bulkWrite()裸弦,批量執(zhí)行有兩種情形(個人理解):

  • 有序執(zhí)行。有序執(zhí)行一個操作失敗時作喘,后續(xù)操作不在執(zhí)行
  • 無序執(zhí)行理疙。無序執(zhí)行時,允許并發(fā)操作泞坦,當一個操作執(zhí)行失敗時窖贤,其它操作依然執(zhí)行,但是也存在風險贰锁。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末赃梧,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子豌熄,更是在濱河造成了極大的恐慌授嘀,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,110評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件锣险,死亡現場離奇詭異蹄皱,居然都是意外死亡,警方通過查閱死者的電腦和手機芯肤,發(fā)現死者居然都...
    沈念sama閱讀 93,443評論 3 395
  • 文/潘曉璐 我一進店門巷折,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人崖咨,你說我怎么就攤上這事盔几。” “怎么了掩幢?”我有些...
    開封第一講書人閱讀 165,474評論 0 356
  • 文/不壞的土叔 我叫張陵逊拍,是天一觀的道長。 經常有香客問我际邻,道長芯丧,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,881評論 1 295
  • 正文 為了忘掉前任世曾,我火速辦了婚禮缨恒,結果婚禮上谴咸,老公的妹妹穿的比我還像新娘。我一直安慰自己骗露,他們只是感情好岭佳,可當我...
    茶點故事閱讀 67,902評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著萧锉,像睡著了一般珊随。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上柿隙,一...
    開封第一講書人閱讀 51,698評論 1 305
  • 那天叶洞,我揣著相機與錄音,去河邊找鬼禀崖。 笑死衩辟,一個胖子當著我的面吹牛,可吹牛的內容都是我干的波附。 我是一名探鬼主播艺晴,決...
    沈念sama閱讀 40,418評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼掸屡!你這毒婦竟也來了封寞?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,332評論 0 276
  • 序言:老撾萬榮一對情侶失蹤折晦,失蹤者是張志新(化名)和其女友劉穎钥星,沒想到半個月后沾瓦,有當地人在樹林里發(fā)現了一具尸體满着,經...
    沈念sama閱讀 45,796評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,968評論 3 337
  • 正文 我和宋清朗相戀三年贯莺,在試婚紗的時候發(fā)現自己被綠了风喇。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,110評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡缕探,死狀恐怖魂莫,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情爹耗,我是刑警寧澤耙考,帶...
    沈念sama閱讀 35,792評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站潭兽,受9級特大地震影響倦始,放射性物質發(fā)生泄漏。R本人自食惡果不足惜山卦,卻給世界環(huán)境...
    茶點故事閱讀 41,455評論 3 331
  • 文/蒙蒙 一鞋邑、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦枚碗、人聲如沸逾一。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽遵堵。三九已至,卻和暖如春酷含,著一層夾襖步出監(jiān)牢的瞬間鄙早,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評論 1 272
  • 我被黑心中介騙來泰國打工椅亚, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留限番,地道東北人。 一個月前我還...
    沈念sama閱讀 48,348評論 3 373
  • 正文 我出身青樓呀舔,卻偏偏與公主長得像弥虐,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子媚赖,可洞房花燭夜當晚...
    茶點故事閱讀 45,047評論 2 355

推薦閱讀更多精彩內容

  • MongoDB常用操作 一霜瘪、查詢 find方法 查詢所有的結果: select * from users;===d...
    止風者閱讀 603評論 1 3
  • 目錄 查詢操作 集合查詢方法 find() 查詢內嵌文檔 查詢操作符(內含 數組查詢) "$gt" 、"$gte"...
    彩虹之夢閱讀 1,023評論 0 1
  • 一惧磺、數據庫常用命令1颖对、Help查看命令提示 復制代碼 代碼如下: helpdb.help();db.yourCol...
    字伯約閱讀 368評論 0 0
  • 成功啟動MongoDB后,再打開一個命令行窗口輸入mongo磨隘,就可以進行數據庫的一些操作缤底。 輸入help可以看到基...
    你本來就很牛閱讀 28,617評論 0 3
  • 配置 修改config/database.php在connection數組中添加mongodb的配置信息,如下 '...
    jooohnny閱讀 8,435評論 3 8