最全 MongoDB 基礎(chǔ)教程

      網(wǎng)友投稿 852 2022-05-29

      MongoDB

      創(chuàng)建數(shù)據(jù)庫

      - 格式:use DATABASE_NAME - use ruochen - db

      創(chuàng)建數(shù)據(jù)庫需要插入一條數(shù)據(jù)才會在列表中顯示

      - db.ruochen.insert({‘name’: ‘若塵’})

      - show dbs

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

      格式:db.dropDatabase()

      use ruochen

      db.dropDatabase()

      show dbs

      創(chuàng)建集合

      - 格式:db.createCollection(name, options) - name: 要創(chuàng)建的集合名稱 - options: 可選參數(shù),指定有關(guān)內(nèi)存大小及索引的選項

      在插入文檔時,MongoDB 首先檢查固定集合的 size 字段,然后檢查 max 字段

      實例 # 在test數(shù)據(jù)庫中創(chuàng)建ruochen 集合 use test db.createCollection('ruochen') # 查看已有集合 show collections db.createCollection('test', {capped: true, autoIndexId: true, size: 1024000, max: 10000}) # autoIndexId 已棄用,默認(rèn)_id添加索引 # 插入文檔時,MongoDB會自動創(chuàng)建集合 db.ruochen.insert({'name': 'ruochen'})

      刪除集合

      格式:db.collection.drop()

      use ruochen

      db.createCollection(‘ruochen’) # 創(chuàng)建集合

      show tables

      db.ruochen.drop()

      show tables

      插入文檔

      格式:db.COLLECTION_NAME.insert(document)

      方法1

      db.ruochen.insert({title: ‘MongoDB 教程’,

      description: ‘shu ju ku’,

      by: ‘ruochen’,

      tags: [‘mongodb’, ‘database’, ‘NoSQL’]

      })

      db.ruochen.find()

      方法2

      document=({title: ‘mongodb’,

      description: ‘shu ju ku’,

      by: ‘ruochen’,

      tags: [‘mongodb’, ‘database’, ‘NoSQL’]

      })

      db.ruochen.insert(document)

      db.ruochen.find()

      db.collection.insertOne() # 向指定集合中插入一條文檔數(shù)據(jù)

      db.collection.insertMany() # 向指定集合中插入多條文檔數(shù)據(jù)

      var document = db.ruochen.insertOne({“e”: 3})

      document

      var res = db.ruochen.insertMany([{‘a(chǎn)’: 1}, {‘b’: 2}])

      res

      一次插入多條數(shù)據(jù)

      先創(chuàng)建數(shù)組

      將數(shù)據(jù)放在數(shù)據(jù)中

      一次insert到集合中

      案例

      var arr = [];

      for(var i = 1; i < 5; i++){

      arr.push({num:i});}

      db.num.insert(arr);

      更新文檔

      格式 db.collection.update( , , { upsert: , multi: , writeConcern: } ) query: update的查詢條件,類似sql update查詢內(nèi)where后面的 update: update的對象和一些更新的操作符(如$,$inc...)等,也可以理解為sql update查詢內(nèi)set后面的 upsert: 可選,這個參數(shù)的意思是,如果不存在update的記錄,是否插入objNew,true為插入,默認(rèn)是false,不插入 multi: 可選,mongodb 默認(rèn)是false,只更新找到的第一條記錄,如果這個參數(shù)為true,就把按條件查出來多條記錄全部更新 writeConcern: 可選,拋出異常的級別 案例 db.ruochen.insert({ title: 'mongodb', description: 'Nosql 數(shù)據(jù)庫', by: 'ruochen', tags: ['mongodb', 'databases', 'NoSQL'] }) db.ruochen.update({'title': 'mongodb'}, {$set:{'title': 'MongoDB'}}) # 只會修改第一條發(fā)現(xiàn)的文檔 db.ruochen.find().pretty() db.ruochen.update({'title': 'mongodb'}, {$set:{'title': 'MongoDB'}}, {multi:true}) # 修改多條相同的文檔 save() 方法: 通過傳入的文檔來替換已有文檔 格式 db.collection.save( , { writeConcern: } ) document: 文檔數(shù)據(jù) writeConcern: 可選,拋出異常的級別 案例 db.ruochen.save({ "_id" : ObjectId("5e631a14c17b253e9cef40cc"), "title" : "MongoDB", "description" : "MongoDB 是一個 Nosql 數(shù)據(jù)庫", "by" : "Runoob", "url" : "http://www.runoob.com", "tags" : [ "mongodb", ] }) db.ruochen.find().pretty()

      刪除文檔

      語法: db.collection.remove( , ) 2.6版本以后語法格式 db.collection.remove( { justOne: , writeConcern: } ) 參數(shù)說明 query: (可選) 刪除的文檔的條件 justOne: (可選) 如果設(shè)為 true 或 1,則只刪除一個文檔,如果不設(shè)置該參數(shù),或使用默認(rèn)值 false,則刪除所有匹配條件的文檔 writeConcern: (可選) 拋出異常的級別 db.ruochen.remove({'title': 'mongodb'}) # 只刪除第一條找到的記錄 db.COLLECTION_NAME.remove(DELETION_CRITHRIA, 1) # 刪除所有數(shù)據(jù) db.ruochen.remove({}) db.ruochen.find() # remove() 方法 并不會真正釋放空間 # 需要執(zhí)行db.repairDatabase() 來回收磁盤空間 db.repairDatabase() db.runCommand({repairDatabase: 1}) remove方法已經(jīng)過時 # 刪除集合下所有文檔 db.ruochen.deleteMany({}) # 刪除 num 等于1 的全部文檔 db.ruochen.deleteMany({num: '1'}) # 刪除 num 等于1 的一個文檔 db.ruochen.deleteOne({num: '1'})

      查詢文檔

      語法: db.collection.find(query, projection) 參數(shù)說明 query: 可選,使用查詢操作符指定查詢條件 projection: 可選,使用投影操作符指定返回的鍵。查詢時返回文檔中所有鍵值, 只需省略該參數(shù)即可(默認(rèn)省略) # 以易讀的方式讀取數(shù)據(jù) db.ruochen.find().pretty()

      AND條件

      find() 方法可以傳入多個鍵(key),每個鍵(key)以逗號隔開,即常規(guī) SQL 的 AND 條件

      格式:

      最全 MongoDB 基礎(chǔ)教程

      db.ruochen.find({key1: value1, key2: value2}).pretty()

      案例

      db.ruochen.find({‘by’: ‘ruochen’, ‘likes’: 200}).pretty()

      類似于 where by=‘ruochen’ and likes=200

      or條件

      格式

      db.ruochen.find( { $or:[ {key1: value1}, {key2: value2} ] } ).pretty()

      案例

      db.ruochen.find({$or:[{‘likes’: 2}, {‘likes’:200}]}).pretty()

      AND和OR聯(lián)合

      db.ruochen.find({‘likes’: {$gt:100}, $or: [{‘likes’: 2}, {‘likes’: 200}]}).pretty()

      條件操作符

      db.ruochen.insert({ title: 'python', description: 'i love python', by: 'ruochen', url: 'xxx', tags: ['python'], likes: 200 }) db.ruochen.insert({ title: 'php', description: 'php是世界上最好的語言', by: 'ruochen', url: 'xxx', tags: ['php'], likes: 150 }) db.ruochen.insert({ title: 'MondoDB', description: 'NoSQL數(shù)據(jù)庫', by: 'ruochen', url: 'xxx', tags: ['mongodb'], likes: 100 }) # 獲取 'ruochen' 集合中 'likes' 大于100的數(shù)據(jù) db.ruochen.find({likes: {$gt: 100}}).pretty() # 類似于SQL語句 Select * from ruochen where likes > 100; 獲取 'ruochen' 集合中 'likes' 大于等于100的數(shù)據(jù) db.ruochen.find({likes: {$gte: 100}}).pretty() # 類似于SQL語句 Select * from ruochen where likes >= 100; # 獲取 'ruochen' 集合中 'likes' 小于150的數(shù)據(jù) db.ruochen.find({likes: {$lt: 150}}).pretty() # 類似于SQL語句 Select * from ruochen where likes < 150; # 獲取 'ruochen' 集合中 'likes' 小于等于150的數(shù)據(jù) db.ruochen.find({likes: {$lte: 150}}).pretty() # 類似于SQL語句 Select * from ruochen where likes <= 150;

      MongoDB 使用 (<) 和 (>) 查詢 - $lt 和 $gt

      獲取"ruochen"集合中 “l(fā)ikes” 大于100,小于 200 的數(shù)據(jù)

      db.ruochen.find({likes: {$lt: 200, $gt: 100}}).pretty()

      類似SQL語句

      Select * from ruochen where likes > 100 and likes < 200;

      模糊查詢

      查詢title中包含 ‘py’ 的文檔

      db.ruochen.find({title:/py/}).pretty()

      查詢title字段以 ‘p’ 開頭的文檔

      db.ruochen.find({title:/^p/}).pretty()

      查詢title 字段以 ‘p’ 結(jié)尾的文檔

      db.ruochen.find({title:/p$/}).pretty()

      MongoDB $type 操作符

      $type操作符是基于BSON類型來檢索集合中匹配的數(shù)據(jù)類型,并返回結(jié)果

      獲取 “ruochen” 集合中 title 為 String 的數(shù)據(jù)

      db.ruochen.find({‘title’: {$type: 2}}).pretty()

      db.ruochen.find({‘title’: {$type: String}}).pretty()

      Limit與Skip方法

      Limit() 方法

      在MongoDB中讀取指定數(shù)量的數(shù)據(jù)記錄, 使用MongoDB的Limit方法

      limit()方法接受一個數(shù)字參數(shù),該參數(shù)指定從MongoDB中讀取的記錄條數(shù)

      語法

      db.COLLECTION_NAME.find().limit(NUMBER)

      案例

      db.ruochen.find().limit(2)

      Skip() 方法

      skip()方法跳過指定數(shù)量的數(shù)據(jù)

      skip方法接受一個數(shù)字參數(shù)作為跳過的記錄條數(shù)

      語法

      db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER)

      案例

      db.ruochen.find().limit(1).skip(1)

      skip() 方法默認(rèn)參數(shù)為0

      MongoDB 排序

      sort() 方法

      sort() 方法可以通過參數(shù)指定排序的字段,并使用 1 和 -1 來指定排序的方式,其中 1 為升序排列,而 -1 是用于降序排列

      語法

      db.COLLECTION_NAME.find().sort({key: 1})

      案例

      ruochen 集合中的數(shù)據(jù)按字段 likes 的降序排列

      db.ruochen.find().sort({‘likes’: -1}).pretty()

      skip(), limilt(), sort()三個放在一起執(zhí)行的時候,執(zhí)行的順序是先 sort(), 然后是 skip(),最后是顯示的 limit()。

      MongoDB 索引

      creatIndex() 方法

      MongoDB使用 createIndex() 方法來創(chuàng)建索引

      語法

      db.collection.createIndex(keys, options)

      Key 值為你要創(chuàng)建的索引字段, 1 為指定按升序創(chuàng)建索引, -1 為降序創(chuàng)建索引

      案例

      db.ruochen.createIndex({‘title’: 1})

      db.ruochen.createIndex({‘title’: 1, ‘description’: -1}) # 設(shè)置多個字段創(chuàng)建索引

      createIndex() 接收可選參數(shù),可選參數(shù)列表如下

      MongoDB聚合

      MongoDB聚合(aggregate)主要用于處理數(shù)據(jù)(諸如統(tǒng)級平均值、求和等), 并返回計算后的數(shù)據(jù)結(jié)果。有點類似sql語句中的count(*)

      aggregate() 方法

      語法

      db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)

      實例

      db.ruochen.aggregate([{group: {_id: "by", num_tutorial: {$sum: 1}}}])

      類似于mql語句

      select by, count(*) from ruochen group by by

      聚合表達(dá)式

      管道

      管道在Unix和Linux中一般用于將當(dāng)前命令的輸出結(jié)果作為下一個命令的參數(shù)

      MongoDB的聚合管道將MongoDB文檔在一個管道處理完畢后將結(jié)果傳遞給下一個管道處理

      管道操作是可以重復(fù)的

      表達(dá)式:處理文檔并輸出

      表達(dá)式是無狀態(tài)的,只能用于計算當(dāng)前聚合管道的文檔,不能處理其它的文檔

      常用操作

      $project:修改輸入文檔的結(jié)構(gòu)。可以用來重命名、增加或刪除域,也可以用于創(chuàng)建計算結(jié)果以及嵌套文檔

      m

      a

      t

      c

      h

      :用于過濾數(shù)據(jù),只輸出符合條件的文檔。

      match:用于過濾數(shù)據(jù),只輸出符合條件的文檔。

      match:用于過濾數(shù)據(jù),只輸出符合條件的文檔。match使用MongoDB的標(biāo)準(zhǔn)查詢操作

      $limit:用來限制MongoDB聚合管道返回的文檔數(shù)

      $skip:在聚合管道中跳過指定數(shù)量的文檔,并返回余下的文檔

      $unwind:將文檔中的某一個數(shù)組類型字段拆分成多條,每條包含數(shù)組中的一個值

      $group:將集合中的文檔分組,可用于統(tǒng)計結(jié)果

      $sort:將輸入文檔排序后輸出

      $geoNear:輸出接近某一地理位置的有序文檔

      舉例

      $project

      db.ruochen.aggregate( { $project: { title: 1, by: 1, }} ); 只剩_id, title 和 by 三個字段,默認(rèn)_id 字段被包含 db.ruochen.aggregate( { $project: { _id: 0 title: 2, by: 1, }} ); 如此即可不包含_id, 非0可表示顯示字段,負(fù)數(shù)也可以表示顯示該字段

      $match

      獲取分?jǐn)?shù)大于70或小于等于90的記錄,然后把符合條件的記錄送到下一階段$group 管道操作符進(jìn)行處理 db.ruochen.aggregate([ {$match: {score: {$gt: 70, $lte: 90}}}, {$group: {_id: null, count: {$sum: 1}}} ])

      當(dāng) match 條件和 group 同時存在時,順序會影響檢索結(jié)果,必須先寫 match 在前面

      $skip

      過濾前5個文檔 db.ruochen.aggregate( {$skip: 5});

      MongoDB 數(shù)據(jù)庫 數(shù)據(jù)結(jié)構(gòu)

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:Hadoop2.2.0集群在RHEL6.2下的安裝實戰(zhàn)
      下一篇:方法調(diào)用:一看就懂,一問就懵?
      相關(guān)文章
      日本亚洲成高清一区二区三区| 国产成人综合亚洲AV第一页| 亚洲午夜未满十八勿入| 久久99国产亚洲高清观看首页| 亚洲精品视频久久久| 色窝窝亚洲av网| 亚洲AV无码成人精品区日韩| 亚洲欧美国产日韩av野草社区| 亚洲熟妇无码一区二区三区 | 亚洲中文字幕无码不卡电影| 亚洲国产小视频精品久久久三级| 爱情岛论坛亚洲品质自拍视频网站| 亚洲熟妇自偷自拍另欧美| 亚洲爆乳AAA无码专区| 亚洲欧美第一成人网站7777| 亚洲国产欧美国产综合一区 | 成人午夜亚洲精品无码网站 | 2020天堂在线亚洲精品专区| 久久亚洲国产最新网站| 亚洲色少妇熟女11p| 精品国产亚洲第一区二区三区| 亚洲av无码专区亚洲av不卡| 337P日本欧洲亚洲大胆艺术图| 狼人大香伊蕉国产WWW亚洲 | 亚洲经典在线中文字幕| 亚洲av无码久久忘忧草| 亚洲综合激情五月丁香六月| 日本亚洲色大成网站www久久| 亚洲精华液一二三产区| 亚洲av高清在线观看一区二区| 亚洲А∨精品天堂在线| 亚洲香蕉成人AV网站在线观看| 亚洲av无码一区二区三区不卡 | 亚洲电影在线免费观看| 亚洲1区1区3区4区产品乱码芒果| 国产精品亚洲精品| 综合偷自拍亚洲乱中文字幕| 在线观看亚洲精品国产| 图图资源网亚洲综合网站| 亚洲国产精品乱码在线观看97 | 亚洲成AV人片在线观看WWW|