MongoDB
一、安裝與卸載
1.Ubuntu
官方文檔:https://docs.mongodb.com/manual/tutorial/install-mongodb-on-ubuntu/
1.1導入包管理系統使用的公鑰
wget -qO - https://www.mongodb.org/static/pgp/server-4.2.asc | sudo apt-key add -
響應 ok
1.2安裝所需的類庫
sudo apt-get install gnupg
1.3配置鏡像源並更新
echo "deb [ arch=amd64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.2.list
sudo apt-get update
1.4安裝MongoDB
sudo apt-get install -y mongodb-org
#自動創建創建數據目錄 /var/lib/mongodb和日誌目錄/var/log/mongodb。/etc/mongod.conf
1.5啓動MongoDB
sudo service mongod start # stop 停止 restart 重啓
1.6驗證MongoDB已成功啓動
http://localhost:27017
結果:It looks like you are trying to access MongoDB over HTTP on the native driver port.
如果你的MongDB安裝在別的主機:則將/etc/mongod.conf文件中bind_id修改爲:0.0.0.0
1.7刪除
sudo service mongod stop
sudo apt-get purge mongodb-org*
sudo rm -r /var/log/mongodb
sudo rm -r /var/lib/mongodb
二、MongoDB入門
1.基礎概念
關係型數據庫 | MongoDB | 解釋/說明 |
---|---|---|
database | database | 數據庫 |
table | collection | 數據庫表/集合 |
row | document | 數據記錄行/文檔 |
column | field | 數據字段/域 |
index | index | 索引 |
table joins | 表連接(MongDB不支持) | |
primary key | primary key | 主鍵,MongoDB自動在沒個集合中添加_id的主鍵 |
注意:
- 一個MongDB實例可以創建多個數據庫
- 一個數據庫可以創建多個集合
- 一個集合可以包括多個文檔
2.連接MongoDB
MongoDB的使用方式是客戶端服務器模式,即使用一個客戶端連接MongoDB數據庫(服務器)。故此有一下幾種連接操作方式。
2.1命令
mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]
mongodb: 固定前綴
username:賬號,可選
password:密碼,可選
host:主機名或ip地址,必填
port:端口,可不填
/database:連接某一個數據庫
?options:連接參數,key/value 對
例子:
mongodb://localhost 連接本地數據庫27017端口 mongodb://root:root@localhost 使用用戶名root密碼爲root連接本地數據庫27017端口 mongodb://localhost,localhost:27018,localhost:27019,連接三臺主從服務器,端口爲27017、27018、27019
2.2使用MongDB自帶的JavaScript Shell(mongo.exe)連接
如windows環境下安裝目錄bin中有mongo.exe客戶端程序。
2.3使用Studio3T、Navicat12.1等工具
2.4使用Java程序連接
官方文檔:http://mongodb.github.io/mongo-java-driver/3.4/driver/tutorials/connect-to-mongodb/
2.4.1添加依賴
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo‐java‐driver</artifactId>
<version>3.4.3</version>
</dependency>
2.4.2測試程序
@Test public void testConnection(){
//創建mongodb 客戶端
MongoClient mongoClient = new MongoClient( "localhost" , 27017 );
//或者採用連接字符串
//MongoClientURI connectionString = new MongoClientURI("mongodb://root:root@localhost:27017");
//MongoClient mongoClient = new MongoClient(connectionString);
//連接數據庫
MongoDatabase database = mongoClient.getDatabase("test");
// 連接collection
MongoCollection<Document> collection = database.getCollection("student");
//查詢第一個文檔
Document myDoc = collection.find().first();
//得到文件內容 json串 String json = myDoc.toJson(); System.out.println(json); }
3.操作數據庫
3.1查詢數據庫
查詢全部數據庫
show dbs
顯示當前數據庫
db
3.2創建/切換數據庫
use DATABASE_NAME
新創建的數據庫不顯示,需要至少包括一個集合
3.3刪除數據庫
這是刪除當前數據庫,需要先切換數據庫
db.dropDatabase()
4.操作集合
集合相當於關係數據庫中的表,一個數據庫可以創建多個集合,一個集合是將相同類型的文檔管理起來。
4.1創建集合
db.createCollection(name, options)
name: 新創建的集合名稱
options: 創建參數
4.2刪除集合
db.collection.drop()
例子: db.student.drop() 刪除student集合
5.操作文檔
5.1插入文檔
mongodb中文檔的格式是json格式,下邊就是一個文檔,包括兩個key:_id主鍵和name
{
"_id" :ObjectId("5b2cc4bfa6a44812707739b5"),
"name" : "小明"
}
插入命令
db.COLLECTION_NAME.insert(document)
每個文檔默認以_id作爲主鍵,主鍵默認類型爲ObjectId(對象類型),mongodb會自動生成主鍵值。
db.student.insert({"name":"張三","age":10})
注意:同一個集合中的文檔的key可以不相同!但是建議設置爲相同的。
5.2更新文檔
命令格式
db.collection.update(
<query>,
<update>,
<options>
)
query:查詢條件,相當於sql語句的where
update:更新文檔內容
options:選項
5.2.1替換文檔
將符合條件 “name”:"張三"的第一個文檔替換爲{“name”:“李四”,“age”:10}。
db.student.update({"name":"張三"},{"name":"李四","age":10})
5.2.2$set修改器
使用$set修改器指定要更新的key,key不存在則創建,存在則更新。
將符合條件 “name”:"張三"的所有文檔更新name和age的值。
db.student.update({"name":"張三"},{$set:{"name":"李四","age":10}},{multi:true})
multi:false表示更新第一個匹配的文檔,true表示更新所有匹配的文檔。
5.2.3刪除文檔
命令格式:
db.student.remove(<query>)
query:刪除條件,相當於sql語句中的where
1)刪除所有文檔
db.student.remove({})
2)刪除符合條件的文檔
db.student.remove({"name":"張三"})
5.2.4查詢文檔
命令格式:
db.collection.find(query, projection) query:查詢條件,可不填
projection:投影查詢key,可不填
1)查詢全部
db.student.find()
2)查詢符合條件的記錄
查詢name等爲"張三"的文檔。
db.student.find({"name":"張三"})
3)投影查詢
只顯示name和age兩個key,_id主鍵不顯示。
db.student.find({"name":"張三"},{name:1,age:1,_id:0})
6.用戶
6.1創建用戶
語法格式:
mongo>db.createUser(
{ user: "<name>",
pwd: "<cleartext password>",
customData: { <any information> },
roles: [
{ role: "<role>", db: "<database>" } | "<role>",
...
]} )
例子:
創建root用戶,角色爲root
use admin
db.createUser( { user:"root", pwd:"root", roles:[{role:"root",db:"admin"}] } )
內置角色如下:
-
數據庫用戶角色:read、readWrite;
-
數據庫管理角色:dbAdmin、dbOwner、userAdmin;
-
集羣管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
-
備份恢復角色:backup、restore;
-
所有數據庫角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、
dbAdminAnyDatabase
- 超級用戶角色:root
6.2查詢用戶
查詢當前庫下的所有用戶:
show users
6.3刪除用戶
語法格式:
db.dropUser(“用戶名”)
例子:
刪除root1用戶
db.dropUser(“root1”)
6.4修改用戶
語法格式:
db.updateUser(
"<username>",
{
customData : { <any information> },
roles : [ { role: "<role>", db: "<database>" } | "<role>", ... ],
pwd: "<cleartext password>" },
writeConcern: { <write concern> })
例子:
修改root用戶的角色爲readWriteAnyDatabase
use admin db.updateUser("root",{roles:[{role:"readWriteAnyDatabase",db:"admin"}]})
6.5修改密碼
語法格式:
db.changeUserPassword("username","newPasswd")
例子:
修改root用戶的密碼爲123
use admin db.changeUserPassword("root","123")