文章目錄
歡迎訪問筆者個人技術博客:http://rukihuang.xyz/
MongoDB入門
1 基礎概念
- MongoDB與關係型數據庫的對比
關係型 | MongoDB | 說明 |
---|---|---|
database | database | 數據庫 |
table | collection | 數據庫表/集合 |
row | document | 數據記錄行/文檔 |
column | field | 數據字段/域 |
index | index | 索引 |
table joins | 表連接(MongoDB不支持) | |
primary key | primary key | 主鍵(MongoDB自動再每個集合中添加-id的主鍵) |
- 一個MongoDB實例可以創建多個數據庫
- 一個數據庫可以創建多個集合
- 一個集合可以包括多個文檔
2 連接MongoDB
2.1 命令格式
mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]
mongodb://
——固定前綴,必填username
——賬號,可不填password
——密碼,可不填host
——主機名或ip地址,只有host主機名爲必填項port
——端口,可不填,默認27017/database
——連接某一個數據庫?options
——連接參數,key/value對
mongodb://localhost 連接本地數據庫27017端口
mongodb://root:123@host 連接本地用戶名root,密碼爲123的本地數據庫27017端口
mongodb://localhost,localhost:27018,localhost:27019 連接三臺主從服務器,端口分別爲27017,27018,27019
2.2 使用mongo.exe
2.3 java程序連接
-
MongoDB詳細連接教程:http://mongodb.github.io/mongo-java-driver/3.4/driver/tutorials/connect-to-mongodb/
-
添加依賴
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>3.4.3</version>
</dependency>
- 測試程序
@Test
public void testConnection() {
//1. 創建MongoDB客戶端
MongoClient mongoClient = new MongoClient("localhost", 20717);
//採用連接字符串
//MongoClientURI connectionString = new MongoClientURI("mongodb://localhost:27017");
//MongoClient mongoClient = new MongoClient(connectionString);
//2. 連接數據庫
MongoDataBase database = mongoClient.getDataBase("test");
//3. 連接collection
MongoCollection<Document> collection = database.getCollection("student");
//4. 查詢第一個文檔
Document myDoc = collection.find().firsr();
//5. 得到文件內容,json串
String json = myDoc.toJson();
System.out.println(json);
}
3 數據庫
3.1 查詢數據庫
show dbs
:查詢全部數據庫db
:顯示當前數據庫
3.2 創建數據庫
use DATABASE_NAME
- 如果有這個名字的數據庫就切換到這個數據庫,沒有就創建
- 注意:新創建的數據庫不顯示,需要至少包括一個集合
3.3 刪除數據庫
- 先切換到這個數據庫
use DATABASE_NAME
- 再執行刪除
db.dropDatabase()
4 集合
- 集合相當於關係數據庫中的表,一個數據庫可以創建多個集合,一個集合是將相同類型的文檔管理起來。
4.1 創建集合
- 先切換到要創建集合的數據庫
use DATABASE_NAME
- 創建集合
db.createCollection(name, options)
name
:新創建的集合名options
:創建參數
4.2 刪除集合
- 切換到數據庫
use DATABASE_NAME
- 刪除集合
db.COLLECTION_NAME.drop()
db.student.drop()
:刪除名爲student的集合
5 文檔
5.1 插入文檔
- mongodb中的文檔是json格式的
- 每個文檔默認以
_id
爲主鍵,主鍵默認爲ObjectId(對象類型),mongodb會自動生成主鍵值
db.student.insert({"name":"小黃","age":10});
5.2 更新文檔
db.COLLECTION_NAME.update(
<query>,
<update>,
<options>
)
- query:查詢條件,相當於sql中的where條件
- update:更新文檔內容
- options:選項
db.student.update({"name":"小黃"},{"name":"小黃鴨","age":"18"})
- 上述命令將name是小黃的文檔查詢出來,並將這個文檔進行更新替換
5.3 刪除文檔
db.COLLECTION_NAME.remove(<query>)
- query:刪除條件,相當於sql中的where
5.4 查詢文檔
db.COLLECTION_NAME.find(query,projection)
- query:查詢條件,可不填
- projection:投影查詢Key,可不填
5.4.1 查詢全部
db.student.find()
5.4.2 查詢符合條件的記錄
db.student.find({"name":"小黃"})
5.4.3 投影查詢
- 只顯示name和age兩個key,_id主鍵不顯示
db.student.find({"name":"小黃"},{name:1,age:1,_id:0})
6 用戶
6.1 創建用戶
db.createUser(
{
user:"<name>",
pwd: "<password>",
custmData:{<any information>},
roles:[{role:"<role>",db:"<database>"}]
}
)
- 例子
db.createUser(
{
user:"root",
pwd: "123",
roles:[{role:"root",db:"admin"}]
}
)
-
內置角色
- 數據庫用戶角色:read,readWrite
- 數據庫管理角色:dbAdmin,dbOwner,userAdmin
- 集羣管理角色:clusterAdmin,clusterManager,clusterMonitor,hostManger
- 備份恢復角色:backup,restore
- 所有數據庫角色:readAnyDatabase,readWriteAnyDatabase,userAdminDatabase,dbAdminAnyDatabase
- 超級用戶角色:root
6.2 認證登錄
1. 在mongo.conf中設置`auth=true`
2. 重啓MongoDB服務
1. 右鍵“此電腦”
2. 點擊“管理”
3. “服務”中找到MongoDB
4. 右鍵—> “重新啓動”
3. 使用賬號密碼連接數據庫mongo.exe
- ——mongo.exe
mongo.exe -u root -p 123 --authenticationDatabase admin
- ——Studio3T
6.3 查詢用戶
show users
6.4 刪除用戶
db.dropUser("<用戶名>")
6.5 修改用戶
use admin
db.updateUser("test01",{roles:[role:"readWriteAnyDatabase",db:"admin"]})
- 先找到這個用戶,再修改
6.6 修改密碼
use admin
db.changeUserPassword("username","newPwd")