欧美人与禽2O2O性论交,秋霞免费视频,国产美女视频免费观看网址,国产成人亚洲综合网色欲网

MongoDB快速入門,掌握這些剛剛好(mongodb入門教程)

摘要

雖說現(xiàn)在關(guān)系型數(shù)據(jù)庫還是主流,但是面對(duì)某些需求的時(shí)候,需要非關(guān)系型數(shù)據(jù)庫來補(bǔ)充它,學(xué)習(xí)一個(gè)主流的Nosql數(shù)據(jù)庫還是很有必要的。MongoDB是一個(gè)功能豐富的NoSQL數(shù)據(jù)庫,本文整理了它最常用的部分形成了這篇入門教程,希望對(duì)大家有所幫助。

簡(jiǎn)介

mongodb是一個(gè)基于分布式文件存儲(chǔ)的數(shù)據(jù)庫。由C 語言編寫,旨在為WEB應(yīng)用提供可擴(kuò)展的高性能數(shù)據(jù)存儲(chǔ)解決方案。MongoDB是一個(gè)介于關(guān)系型數(shù)據(jù)庫和非關(guān)系型數(shù)據(jù)庫之間的產(chǎn)品,是非關(guān)系型數(shù)據(jù)庫當(dāng)中功能最豐富,最像關(guān)系型數(shù)據(jù)庫的。

安裝

以前寫的MongoDB安裝教程是基于3.2版本的,發(fā)現(xiàn)有的朋友使用新版本安裝有問題,這次我們使用最新版本再來安裝一次,本文所使用的MongoDB版本為4.2.5,總的來說,新版本的安裝更簡(jiǎn)單了。

Windows下的安裝

  • 下載MongoDB安裝包,選擇Windows x64版本安裝,下載地址:www.mongodb.com/download-ce…

MongoDB快速入門,掌握這些剛剛好(mongodb入門教程)

  • 運(yùn)行MongoDB安裝包并選擇自定義安裝,設(shè)置好安裝路徑;

MongoDB快速入門,掌握這些剛剛好(mongodb入門教程)

  • 配置MongoDB,讓MongoDB作為服務(wù)運(yùn)行,并配置好數(shù)據(jù)目錄和日志目錄;

MongoDB快速入門,掌握這些剛剛好(mongodb入門教程)

  • 取消MongoDB Compass的安裝選項(xiàng)(不取消安裝極慢),需要可自行安裝;

MongoDB快速入門,掌握這些剛剛好(mongodb入門教程)

  • 雙擊mongo.exe可以運(yùn)行MongoDB自帶客戶端,操作MongoDB;

MongoDB快速入門,掌握這些剛剛好(mongodb入門教程)

  • 連接成功后會(huì)顯示如下信息;

MongoDB快速入門,掌握這些剛剛好(mongodb入門教程)

  • 如果需要移除MongoDB服務(wù),只需使用管理員權(quán)限運(yùn)行cmd工具,并輸入如下命令。

sc.exe delete MongoDB復(fù)制代碼

Linux下的安裝

  • 下載MongoDB的Docker鏡像;

docker pull mongo:4.2.5復(fù)制代碼

  • 使用Docker命令啟動(dòng)MongoDB服務(wù);

docker run -p 27017:27017 --name mongo -v /mydata/mongo/db:/data/db -d mongo:4.2.5復(fù)制代碼

  • 有時(shí)候我們需要為MongoDB設(shè)置賬號(hào),可以使用如下命令啟動(dòng);

docker run -p 27017:27017 --name mongo -v /mydata/mongo/db:/data/db -d mongo:4.2.5 --auth復(fù)制代碼

  • 然后我們需要進(jìn)入容器中的MongoDB客戶端;

docker exec -it mongo mongo復(fù)制代碼

  • 之后在admin集合中創(chuàng)建一個(gè)賬號(hào)用于連接,這里創(chuàng)建的是基于root角色的超級(jí)管理員帳號(hào);

use admindb.createUser({ user: 'mongoadmin', pwd: 'secret', roles: [ { role: "root", db: "admin" } ] });復(fù)制代碼

  • 創(chuàng)建完成后驗(yàn)證是否可以登錄;

db.auth("mongoadmin","secret")復(fù)制代碼

  • 整個(gè)賬號(hào)創(chuàng)建過程可以參考下圖。

MongoDB快速入門,掌握這些剛剛好(mongodb入門教程)

客戶端工具

MongoDB的客戶端工具有很多,上面沒安裝的MongoDB Compass就是其中之一,另外Navicat 15版本也有MongoDB的管理功能。這里我們使用的是一款免費(fèi)的客戶端工具Robo 3T(以前叫Robomongo)。

  • 首先下載客戶端工具,下載地址:robomongo.org/download

MongoDB快速入門,掌握這些剛剛好(mongodb入門教程)

  • 下載完成后解壓,雙擊robo3t.exe即可使用;

MongoDB快速入門,掌握這些剛剛好(mongodb入門教程)

  • 之后創(chuàng)建一個(gè)到MongoDB的連接;

MongoDB快速入門,掌握這些剛剛好(mongodb入門教程)

  • 創(chuàng)建連接成功以后,就可以操作MongoDB了。

MongoDB快速入門,掌握這些剛剛好(mongodb入門教程)

相關(guān)概念

MongoDB是非關(guān)系型數(shù)據(jù)庫當(dāng)中最像關(guān)系型數(shù)據(jù)庫的,所以我們通過它與關(guān)系型數(shù)據(jù)庫的對(duì)比,來了解下它的概念。

SQL概念 MongoDB概念 解釋/說明 database database 數(shù)據(jù)庫 table collection 數(shù)據(jù)庫表/集合 row document 數(shù)據(jù)記錄行/文檔 column field 數(shù)據(jù)字段/域 index index 索引 primary key primary key 主鍵,MongoDB自動(dòng)將_id字段設(shè)置為主鍵

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

  • 創(chuàng)建數(shù)據(jù)庫,使用use命令去創(chuàng)建數(shù)據(jù)庫,當(dāng)插入第一條數(shù)據(jù)時(shí)會(huì)創(chuàng)建數(shù)據(jù)庫,例如創(chuàng)建一個(gè)test數(shù)據(jù)庫;

> use testswitched to db test> db.article.insert({name:"MongoDB 教程"})WriteResult({ "nInserted" : 1 })> show dbsadmin 0.000GBconfig 0.000GBlocal 0.000GBtest 0.000GB復(fù)制代碼

  • 刪除數(shù)據(jù)庫,使用db對(duì)象中的dropDatabase()方法來刪除;

> db.dropDatabase(){ "dropped" : "test", "ok" : 1 }> show dbsadmin 0.000GBconfig 0.000GBlocal 0.000GB復(fù)制代碼

集合操作

  • 創(chuàng)建集合,使用db對(duì)象中的createCollection()方法來創(chuàng)建集合,例如創(chuàng)建一個(gè)article集合;

> use testswitched to db test> db.createCollection("article"){ "ok" : 1 }> show collectionsarticle復(fù)制代碼

  • 刪除集合,使用collection對(duì)象的drop()方法來刪除集合,例如刪除一個(gè)article集合;

> db.article.drop()true> show collections復(fù)制代碼

文檔操作

上面的數(shù)據(jù)庫和集合操作是在MongoDB的客戶端中進(jìn)行的,下面的文檔操作都是在Robomongo中進(jìn)行的。

插入文檔

  • MongoDB通過collection對(duì)象的insert()方法向集合中插入文檔,語法如下;

db.collection.insert(document)復(fù)制代碼

  • 使用collection對(duì)象的insert()方法來插入文檔,例如插入一個(gè)article文檔;

db.article.insert({title: 'MongoDB 教程', description: 'MongoDB 是一個(gè) Nosql 數(shù)據(jù)庫', by: 'Andy', url: 'https://www.mongodb.com/', tags: ['mongodb', 'database', 'NoSQL'], likes: 100})復(fù)制代碼

  • 使用collection對(duì)象的find()方法可以獲取文檔,例如獲取所有的article文檔;

db.article.find({})復(fù)制代碼

{ "_id" : ObjectId("5e9943661379a112845e4056"), "title" : "MongoDB 教程", "description" : "MongoDB 是一個(gè) Nosql 數(shù)據(jù)庫", "by" : "Andy", "url" : "https://www.mongodb.com/", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100.0}復(fù)制代碼

更新文檔

  • MongoDB通過collection對(duì)象的update()來更新集合中的文檔,語法如下;

db.collection.update( <query>, <update>, { multi: <boolean> })# query:修改的查詢條件,類似于SQL中的WHERE部分# update:更新屬性的操作符,類似與SQL中的SET部分# multi:設(shè)置為true時(shí)會(huì)更新所有符合條件的文檔,默認(rèn)為false只更新找到的第一條復(fù)制代碼

  • 將title為MongoDB 教程的所有文檔的title修改為MongoDB;

db.article.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}},{multi:true})復(fù)制代碼

  • 除了update()方法以外,save()方法可以用來替換已有文檔,語法如下;

db.collection.save(document)復(fù)制代碼

  • 這次我們將ObjectId為5e9943661379a112845e4056的文檔的title改為MongoDB 教程;

db.article.save({ "_id" : ObjectId("5e9943661379a112845e4056"), "title" : "MongoDB 教程", "description" : "MongoDB 是一個(gè) Nosql 數(shù)據(jù)庫", "by" : "Andy", "url" : "https://www.mongodb.com/", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100.0})復(fù)制代碼

刪除文檔

  • MongoDB通過collection對(duì)象的remove()方法來刪除集合中的文檔,語法如下;

db.collection.remove( <query>, { justOne: <boolean> })# query:刪除的查詢條件,類似于SQL中的WHERE部分# justOne:設(shè)置為true只刪除一條記錄,默認(rèn)為false刪除所有記錄復(fù)制代碼

  • 刪除title為MongoDB 教程的所有文檔;

db.article.remove({'title':'MongoDB 教程'})復(fù)制代碼

查詢文檔

  • MongoDB通過collection對(duì)象的find()方法來查詢文檔,語法如下;

db.collection.find(query, projection)# query:查詢條件,類似于SQL中的WHERE部分# projection:可選,使用投影操作符指定返回的鍵復(fù)制代碼

  • 查詢article集合中的所有文檔;

db.article.find()復(fù)制代碼

/* 1 */{ "_id" : ObjectId("5e994dcb1379a112845e4057"), "title" : "MongoDB 教程", "description" : "MongoDB 是一個(gè) Nosql 數(shù)據(jù)庫", "by" : "Andy", "url" : "https://www.mongodb.com/", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 50.0}/* 2 */{ "_id" : ObjectId("5e994df51379a112845e4058"), "title" : "Elasticsearch 教程", "description" : "Elasticsearch 是一個(gè)搜索引擎", "by" : "Ruby", "url" : "https://www.elastic.co/cn/", "tags" : [ "elasticearch", "database", "NoSQL" ], "likes" : 100.0}/* 3 */{ "_id" : ObjectId("5e994e111379a112845e4059"), "title" : "Redis 教程", "description" : "Redis 是一個(gè)key-value數(shù)據(jù)庫", "by" : "Andy", "url" : "https://redis.io/", "tags" : [ "redis", "database", "NoSQL" ], "likes" : 150.0}復(fù)制代碼

  • MongoDB中的條件操作符,通過與SQL語句的對(duì)比來了解下;

操作 格式 SQL中的類似語句 等于 {<key>:<value>} where title = 'MongoDB 教程' 小于 {<key>:{$lt:<value>}} where likes < 50 小于或等于 {<key>:{$lte:<value>}} where likes <= 50 大于 {<key>:{$gt:<value>}} where likes > 50 大于或等于 {<key>:{$gte:<value>}} where likes >= 50 不等于 {<key>:{$ne:<value>}} where likes != 50

  • 條件查詢,查詢title為MongoDB 教程的所有文檔;

db.article.find({'title':'MongoDB 教程'})復(fù)制代碼

  • 條件查詢,查詢likes大于50的所有文檔;

db.article.find({'likes':{$gt:50}})復(fù)制代碼

  • AND條件可以通過在find()方法傳入多個(gè)鍵,以逗號(hào)隔開來實(shí)現(xiàn),例如查詢title為MongoDB 教程并且by為Andy的所有文檔;

db.article.find({'title':'MongoDB 教程','by':'Andy'})復(fù)制代碼

  • OR條件可以通過使用$or操作符實(shí)現(xiàn),例如查詢title為Redis 教程或MongoDB 教程的所有文檔;

db.article.find({$or:[{"title":"Redis 教程"},{"title": "MongoDB 教程"}]})復(fù)制代碼

  • AND 和 OR條件的聯(lián)合使用,例如查詢likes大于50,并且title為Redis 教程或者"MongoDB 教程的所有文檔。

db.article.find({"likes": {$gt:50}, $or: [{"title": "Redis 教程"},{"title": "MongoDB 教程"}]})復(fù)制代碼

其他操作

Limit與Skip操作

  • 讀取指定數(shù)量的文檔,可以使用limit()方法,語法如下;

db.collection.find().limit(NUMBER)復(fù)制代碼

  • 只查詢article集合中的2條數(shù)據(jù);

db.article.find().limit(2)復(fù)制代碼

  • 跳過指定數(shù)量的文檔來讀取,可以使用skip()方法,語法如下;

db.collection.find().limit(NUMBER).skip(NUMBER)復(fù)制代碼

  • 從第二條開始,查詢article集合中的2條數(shù)據(jù);

db.article.find().limit(2).skip(1)復(fù)制代碼

排序

  • 在MongoDB中使用sort()方法對(duì)數(shù)據(jù)進(jìn)行排序,sort()方法通過參數(shù)來指定排序的字段,并使用1和-1來指定排序方式,1為升序,-1為降序;

db.collection.find().sort({KEY:1})復(fù)制代碼

  • 按article集合中文檔的likes字段降序排列;

db.article.find().sort({likes:-1})復(fù)制代碼

索引

  • 索引通常能夠極大的提高查詢的效率,如果沒有索引,MongoDB在讀取數(shù)據(jù)時(shí)必須掃描集合中的每個(gè)文件并選取那些符合查詢條件的記錄。
  • MongoDB使用createIndex()方法來創(chuàng)建索引,語法如下;

db.collection.createIndex(keys, options)# background:建索引過程會(huì)阻塞其它數(shù)據(jù)庫操作,設(shè)置為true表示后臺(tái)創(chuàng)建,默認(rèn)為false# unique:設(shè)置為true表示創(chuàng)建唯一索引# name:指定索引名稱,如果沒有指定會(huì)自動(dòng)生成復(fù)制代碼

  • 給title和description字段創(chuàng)建索引,1表示升序索引,-1表示降序索引,指定以后臺(tái)方式創(chuàng)建;

db.article.createIndex({"title":1,"description":-1}, {background: true})復(fù)制代碼

  • 查看article集合中已經(jīng)創(chuàng)建的索引;

db.article.getIndexes()復(fù)制代碼

/* 1 */[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "test.article" }, { "v" : 2, "key" : { "title" : 1.0, "description" : -1.0 }, "name" : "title_1_description_-1", "ns" : "test.article", "background" : true }]復(fù)制代碼

聚合

  • MongoDB中的聚合使用aggregate()方法,類似于SQL中的group by語句,語法如下;

db.collection.aggregate(AGGREGATE_OPERATION)復(fù)制代碼

  • 聚合中常用操作符如下;

操作符 描述 $sum 計(jì)算總和 $avg 計(jì)算平均值 $min 計(jì)算最小值 $max 計(jì)算最大值

  • 根據(jù)by字段聚合文檔并計(jì)算文檔數(shù)量,類似與SQL中的count()函數(shù);

db.article.aggregate([{$group : {_id : "$by", sum_count : {$sum : 1}}}])復(fù)制代碼

/* 1 */{ "_id" : "Andy", "sum_count" : 2.0}/* 2 */{ "_id" : "Ruby", "sum_count" : 1.0}復(fù)制代碼

  • 根據(jù)by字段聚合文檔并計(jì)算likes字段的平局值,類似與SQL中的avg()語句;

db.article.aggregate([{$group : {_id : "$by", avg_likes : {$avg : "$likes"}}}])復(fù)制代碼

/* 1 */{ "_id" : "Andy", "avg_likes" : 100.0}/* 2 */{ "_id" : "Ruby", "avg_likes" : 100.0}復(fù)制代碼

正則表達(dá)式

  • MongoDB使用$regex操作符來設(shè)置匹配字符串的正則表達(dá)式,可以用來模糊查詢,類似于SQL中的like操作;
  • 例如查詢title中包含教程的文檔;

db.article.find({title:{$regex:"教程"}})復(fù)制代碼

  • 不區(qū)分大小寫的模糊查詢,使用$options操作符;

db.article.find({title:{$regex:"elasticsearch",$options:"$i"}})

作者:MacroZheng
鏈接:https://juejin.im/post/5eb4043cf265da7bf5368276

相關(guān)新聞

聯(lián)系我們
聯(lián)系我們
公眾號(hào)
公眾號(hào)
在線咨詢
分享本頁
返回頂部