關於
今天第一次學習mongodb 遇到很多困難, 網上看了很多博客,發現解決方案都不是很好, 可能是比較菜 嘻嘻 一開始連什麼是Mongodb 都不知道,而博客是會告訴我怎麼安裝,這搞得我很被動,一臉茫然,所以今天我就來寫篇博客讓大家都能瞭解 Mongodb ,如果覺得對你有一定幫助,就請大佬關注一下子,這是對我最大的肯定謝謝啦!
什麼是MongoDB
- MongoDB是一個基於分佈式文件存儲 [1] 的數據庫。由 C++ 語言編寫。旨在爲WEB應用提供可擴展的高性能數據存儲解決方案。
- MongoDB是一個介於關係數據庫和非關係數據庫之間的產品,是非關係數據庫當中功能最豐富,最像關係數據庫的。它支持的數據結構非常鬆散,是類似json的bson格式,因此可以存儲比較複雜的數據類型。Mongo最大的特點是它支持的查詢語言非常強大,其語法有點類似於面向對象的查詢語言,幾乎可以實現類似關係數據庫單表查詢的絕大部分功能,而且還支持對數據建立索引。
1. 從上面我們知道 MongoDB 是用 C++ 編寫的
2. MongoDB 的數據結構和json差不多
3. MongoDB是一款爲web應用程序和互聯網基礎設施設計的數據庫管理系統
如果還不明白我們來看一副概念圖,他和普通數據庫的區別幫助你更容易理解MongoDB 的概念
SQL術語/概念 | MongoDB術語/概念 | 解釋/說明 |
---|---|---|
database | database | 數據庫 |
table | collection | 數據庫表/集合 |
row | document | 數據記錄行/文檔 |
column | field | 數據字段/域 |
index | index | 索引 |
table joins | 表連接,MongoDB不支持 | |
primary key | primary key | 主鍵,MongoDB自動將_id字段設置爲主鍵 |
通過下圖實例,我們也可以更直觀的瞭解Mongo中的一些概念:
面試題
以下是我在面試,收集到的MongoDB面試題
- 你說的NoSQL數據庫是什麼意思?
- NoSQL與RDBMS直接有什麼區別?
- 爲什麼要使用和不使用NoSQL數據庫?
- 說一說NoSQL數據庫的幾個優點?
- MongoDB成爲最好NoSQL數據庫的原因是什麼?
- 名字空間(namespace)是什麼?
- 如果用戶移除對象的屬性,該屬性是否從存儲層中刪除?
- 什麼是master或primary?
答案 :建議大家自己去百度,這樣記得更牢固,
下載和安裝MongoDB
爲了方便大家下載這裏準備兩種下載方式
網盤: 網盤點擊這裏 密碼 ctyy
官網下載
點擊DOWNLOAD按鈕,開始下載
不過值得注意的是,上次測試了最新版本,在官網下載安裝之後沒有mongo.exe和mongod.exe
因此我又卸載了官網版本,使用解壓包重新安裝,解壓包版本如下:
有興趣的話還是可以從官網下載,然後觀察下差異
安裝過程一路Click Next然後 Click Install 等安裝完成即可,下圖安裝路徑,建議自定義一下,不推薦安裝到系統盤
安裝完成
二:配置使用
- 創建幾個文件夾具體如下:數據庫路徑(data目錄)、日誌路徑(logs目錄)和日誌文件(logs/mongo.log文件)
- 創建配置文件mongo.conf,文件內容如下:
- 啓動MongoDB服務
mongod –config “D:\Mongo\mongo.conf”
這個是使用自己剛剛在上面配置的配置文件來啓動服務的。注意修改成自己的目錄位置
- 創建並啓動MongoDB服務
如果每次都如上操作,豈不是相當麻煩,按照如下命令來創建並啓動MongoDB服務,就可以通過windows服務來管理MongoDB的啓動和關閉了
mongod –config “D:\Mongo\mongo.conf” –install –serviceName “MongoDB”
net start MongoDB
執行完之後,就可以去服務裏看是否有成功創建了
接下來使用Robomongo客戶端管理工具就可以連接,後因收購被改名爲Robo 3T CSDN 獲取地址
Nice,連接成功,如下圖
MongoDB會默認創建admin和local庫,不過剛纔安裝的Mongodb並不需要權限驗證,如果數據安全性不需要很高,則可以安裝不需要驗證的db庫,通過設置服務器之間的白名單做到訪問安全
三:安裝Authorization校驗的MongoDB
需要注意的是:如果之前安裝MongoDB時不需要 Auth,那麼必須卸載MongoDB服務,進行重新安裝,設置賬號權限才生效!
首先卸載之前的mongodb服務,接着刪除data文件夾下所有東西,再清空log
然後再次註冊個服務的話,命令多添加個 –auth
mongod –config “D:\Mongo\mongo.conf” –auth –install –serviceName “MongoDB”
net start MongoDB
此時就可以用Robomongo工具進行連接試一下
mongod.exe --remove --serviceName "MongoDB"
mongod --config "D:\Mongo\mongo.conf" --auth --install --serviceName "MongoDB"
net start MongoDB
use admin
db.createUser({user: "admin",pwd: "password",roles: [ { role: "root", db: "admin" } ]});
exit
e.g. 新建數據庫
mongo --port 27017 -u admin -p password --authenticationDatabase admin
創建數據庫lxkdb,當在這個數據庫寫入數據的時候,這個數據庫就出現了
use minily
創建普通賬戶
db.createUser({user: "minily",pwd: "password",roles: [{ role: "readWrite", db: "minily" }]});
選擇剛剛創建的數據庫
use minily
然後進行數據庫權限的認證,返回1就是認證OK,0就是認證失敗。這個也是重點,在操作數據庫之前要有那麼一次的權限認證
db.auth('minily','password')
新建Collection,並添加一條數據
db.student.save({name: 'zhangsan', age: 25, sex: true});
在數據庫minily中,插入一條數據,這個表叫student
show collections
顯示當前數據庫有的集合,也就是表
db.student.find()
查student表全部
·以上操作在Robomongo工具上來實現,簡直不要太爽
·索引等進階知識可以看官網
db.collection.createIndex()
roles 用戶角色:
oles 用戶角色:
- 數據庫用戶角色:read、readWrite;
- 數據庫管理角色:dbAdmin、dbOwner、userAdmin;
- 集羣管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
- 備份恢復角色:backup、restore;
- 所有數據庫角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
- 超級用戶角色:root
快速啓動和停止服務的快捷鍵
a. net start serviceName
net stop serviceName
最後,每次要在命令行使用mongo命令,都得進入到對應的bin目錄下,這樣很是麻煩,配置個系統環境變量,方便直接使用
這樣就可以直接在cmd命令行,不需要進行目錄切換,就可以直接使用 mongo.exe 命令
—————————常用命令以及T-SQL增刪改查語句————————————–
查看錶基本信息:db.getCollection(‘AUDCAD’).stats() 類似於MySql的EXPLAIN
倒序查詢數據:db.getCollection(‘AUDCAD’).find({}).sort({field:-1})
命令
- show dbs; #查看全部數據庫
- show collections; #顯示當前數據庫中的集合(類似關係數據庫中的表)
- show users; #查看當前數據庫的用戶信息
- use ; #切換數據庫跟mysql一樣
- db;或者db.getName(); #查看當前所在數據庫
- db.help(); #顯示數據庫操作命令,裏面有很多的命令
- db.foo.help(); #顯示集合操作命令,同樣有很多的命令,foo指的是當前數據庫下,一個叫foo的集合,並非真正意義上的命令
- db.foo.find(); #對於當前數據庫中的foo集合進行數據查找(由於沒有條件,會列出所有數據)
- db.foo.find( { a : 1 } ); #對於當前數據庫中的foo集合進行查找,條件是數據中有一個屬性叫a,且a的值爲1
- db.version(); #當前db版本
- db.getMongo(); #查看當前db的連接機器地址
- db.dropDatabase(); #刪除數據庫
好了,那我們就寫到這裏了,希望不懂的地方還請大家多多指教