
基礎概念html
- MongoDB 元素概念
- databases: 數據庫;
- collections:表;(collections組成了databases)
- documents:行;(documents組成了collections)
- MongoDB 沒有新建數據庫的命令,只要進行 insert 或其它操做,MongoDB 就會自動幫你創建數據庫和 collection。當查詢一個不存在的 collection 時也不會出錯,MongoDB 會認爲那是一個空的 collection。
- 一個對象被插入到數據庫中時,若是它沒有 ID,會自動生成一個 "_id" 字段,爲 12 字節(24位)16進制數。
- 固然若是插入文檔不帶 _id,則系統會幫你自動建立一個,若是本身指定了就用本身指定的。
若是你用 Spring Data MongoDB 依賴請注意java
- 請先看官網最新支持到哪一個版本的依賴:docs.spring.io/spring-data…
- 查看錨點爲:What’s new in Spring Data MongoDB 的內容,好比:What’s new in Spring Data MongoDB 1.10,出現這樣一句話:Compatible with MongoDB Server 3.4 and the MongoDB Java Driver 3.4
- 目前 201712 支持 MongoDB 3.4
若是你用 Robomongo 客戶端請注意linux
Docker 下安裝 MongoDBgit
- 先建立一個宿主機之後用來存放數據的目錄:mkdir -p /data/docker/mongo/db
- 賦權:chmod 777 -R /data/docker/mongo/db
- 首次運行鏡像:docker run --name cloud-mongo -p 27017:27017 -v /data/docker/mongo/db:/data/db -d mongo:3.4
- 進入容器中 mongo shell 交互界面:docker exec -it cloud-mongo mongo adg_mongo_db
- 建立一個用戶:
db.createUser(github
{spring
user: "adguser",mongodb
pwd: "adg123456",docker
roles: [ shell
{ role: "dbAdmin", db: "adg_mongo_db" },數據庫
{ role: "readWrite", db: "adg_mongo_db" }
]
}
)
- 而後停掉容器:docker stop cloud-mongo
- 而後刪除容器:docker rm cloud-mongo
- 從新運行鏡像,此次增長鬚要受權才能訪問的配置:docker run -d -p 27017:27017 -v /data/docker/mongo/db:/data/db --restart always --name cloud-mongo mongo:3.4 --auth
- 從新啓動服務:docker restart cloud-mongo
- 導出:docker exec -it cloud-mongo mongoexport -h 127.0.0.1 -u 用戶名 -p 密碼 -d 庫名 -c 集合名 -o /data/db/mongodb.json --type json
- 導入:docker exec -it cloud-mongo mongoimport -h 127.0.0.1 -u 用戶名 -p 密碼 -d 庫名 -c 集合名 --file /data/db/mongodb.json --type json
安裝環境
MongoDB 安裝
- 關閉 SELinux
- 編輯配置文件:vim /etc/selinux/config
- 把 SELINUX=enforcing 改成 SELINUX=disabled
- MongoDB 安裝
yum 卸載
- yum remove "mongodb-org-*"
3.4.2 yum 安裝
- 新建文件:vim /etc/yum.repos.d/mongodb-org-3.4.repo,文件內容以下:
[mongodb-org-3.4]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.4/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.4.asc
- 若是你要安裝 2.6 的版本,可使用下面這個內容:
[mongodb-org-2.6]
name=MongoDB 2.6 Repository
baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64/
gpgcheck=0
enabled=1
- 上面文件新建好以後,輸入安裝命令:yum install -y mongodb-org,一共有 5 個包,加起來有 100M 左右,國內下載速度不快,須要等等,可能還會出錯,若是出錯用國內源:mirror.tuna.tsinghua.edu.cn/help/mongod…
- 開放防火牆端口:
- iptables -A INPUT -p tcp -m tcp --dport 27017 -j ACCEPT
- service iptables save
- service iptables restart
3.6 yum 安裝:
- 新建文件:vim /etc/yum.repos.d/mongodb-org-3.6.repo,文件內容以下:
[mongodb-org-3.6]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/testing/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.6.asc
- 上面文件新建好以後,輸入安裝命令:yum install -y mongodb-org,一共有 5 個包,加起來有 100M 左右,國內下載速度不快,須要等等,可能還會出錯,若是出錯用國內源:mirror.tuna.tsinghua.edu.cn/help/mongod…
- 開放防火牆端口:
- iptables -A INPUT -p tcp -m tcp --dport 27017 -j ACCEPT
- service iptables save
- service iptables restart
3.4.10 tar 綠色安裝
- 下載:wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel62-3.4.10.tgz
- 解壓到指定目錄,並重命名:
tar zxvf mongodb-linux-x86_64-rhel62-3.4.10.gz
mv mongodb-linux-x86_64-rhel62-3.4.10 mongodb
mv mongodb /usr/program
vim ~/.zshrc
export MONGODB_HOME=/usr/program/mongodb
export PATH=$MONGODB_HOME/bin:$PATH
source ~/.zshrc
- 測試是否安裝成功:mongod -v,安裝成功會獲得以下信息:
2017-12-03T00:08:09.854+0800 I CONTROL [initandlisten] MongoDB starting : pid=31155 port=27017 dbpath=/data/db 64-bit host=youmeek
2017-12-03T00:08:09.854+0800 I CONTROL [initandlisten] db version v3.4.10
2017-12-03T00:08:09.854+0800 I CONTROL [initandlisten] git version: 078f28920cb24de0dd479b5ea6c66c644f6326e9
2017-12-03T00:08:09.854+0800 I CONTROL [initandlisten] OpenSSL version: OpenSSL 1.0.1e-fips 11 Feb 2013
2017-12-03T00:08:09.854+0800 I CONTROL [initandlisten] allocator: tcmalloc
2017-12-03T00:08:09.854+0800 I CONTROL [initandlisten] modules: none
2017-12-03T00:08:09.854+0800 I CONTROL [initandlisten] build environment:
2017-12-03T00:08:09.854+0800 I CONTROL [initandlisten] distmod: rhel62
2017-12-03T00:08:09.854+0800 I CONTROL [initandlisten] distarch: x86_64
2017-12-03T00:08:09.854+0800 I CONTROL [initandlisten] target_arch: x86_64
2017-12-03T00:08:09.854+0800 I CONTROL [initandlisten] options: { systemLog: { verbosity: 1 } }
2017-12-03T00:08:09.854+0800 D - [initandlisten] User Assertion: 29:Data directory /data/db not found. src/mongo/db/service_context_d.cpp 98
2017-12-03T00:08:09.854+0800 I STORAGE [initandlisten] exception in initAndListen: 29 Data directory /data/db not found., terminating
2017-12-03T00:08:09.854+0800 I NETWORK [initandlisten] shutdown: going to close listening sockets...
2017-12-03T00:08:09.854+0800 I NETWORK [initandlisten] shutdown: going to flush diaglog...
2017-12-03T00:08:09.854+0800 I CONTROL [initandlisten] now exiting
2017-12-03T00:08:09.854+0800 I CONTROL [initandlisten] shutting down with code:100
mkdir -p /usr/program/mongodb/data
mkdir -p /usr/program/mongodb/log
touch /usr/program/mongodb/log/mongodb.log
- 建立配置文件:vim /etc/mongodb.conf,並寫入內容:
dbpath=/usr/program/mongodb/data
logpath=/usr/program/mongodb/log/mongodb.log
logappend=true
port=27017
fork=true
- 看下是否已經有 mongo 在運行,若是有就 kill 掉:ps -ef | grep mongo
- 經過配置文件啓動:mongod -f /etc/mongodb.conf
- 顯示下面信息則表示啓動了:
about to fork child process, waiting until server is ready for connections.
forked process: 29167
child process started successfully, parent exiting
- 進入 MongoDB 後臺管理 Shell:cd /usr/program/mongodb/bin && ./mongo
- 建立數據庫:
use youmeek
- 建立用戶,並受權,須要注意的是:dbAdmin 的權限是沒有包含 readWrite,因此不少時候要根據需求添加多個權限:
db.createUser(
{
user: "youmeek",
pwd: "youmeek123456",
roles: [
{ role: "dbAdmin", db: "youmeek" },
{ role: "readWrite", db: "youmeek" }
]
}
)
iptables -A INPUT -p tcp -m tcp --dport 27017 -j ACCEPT
service iptables save
service iptables restart
- 修改配置文件:vim /etc/mongodb.conf,在文件最後面增長一行:
auth=true
- 表示開啓用戶認證,這樣後面要鏈接 mongo 就必須輸入數據庫、用戶名、密碼。
- 而後重啓 mongo,開始使用。
其餘經常使用命令:
- 檢查版本:mongod --version
- 啓動:service mongod start
- 中止:service mongod stop
- 重啓:service mongod restart
- 添加自啓動:chkconfig mongod on
- 進入客戶端:mongo,若是有受權用戶格式爲:mongo 127.0.0.1:27017/admin -u 用戶名 -p 用戶密碼
- 卸載命令:yum erase $(rpm -qa | grep mongodb-org)
- 刪除數據庫:rm -r /var/lib/mongo
- 刪除 log:rm -r /var/log/mongodb
添加受權用戶
- 先進入 mongo 客戶端 :mongo
- 輸入:use admin,而後輸入:
db.createUser(
{
user: "gitnavi",
pwd: "123456",
roles: [ { "role" : "dbAdmin", "db" : "youmeek_nav" } ]
}
)
- 修改密碼:db.changeUserPassword(用戶名, 密碼)
- 刪除用戶: db.removeUser(用戶名)
- 內置角色:
- read:容許用戶讀取指定數據庫
- readWrite:容許用戶讀寫指定數據庫
- dbAdmin:容許用戶在指定數據庫中執行管理函數,如索引建立、刪除,查看統計或訪問system.profile
- userAdmin:容許用戶向system.users集合寫入,能夠找指定數據庫裏建立、刪除和管理用戶
- clusterAdmin:只在admin數據庫中可用,賦予用戶全部分片和複製集相關函數的管理權限。
- readAnyDatabase:只在admin數據庫中可用,賦予用戶全部數據庫的讀權限
- readWriteAnyDatabase:只在admin數據庫中可用,賦予用戶全部數據庫的讀寫權限
- userAdminAnyDatabase:只在admin數據庫中可用,賦予用戶全部數據庫的userAdmin權限
- dbAdminAnyDatabase:只在admin數據庫中可用,賦予用戶全部數據庫的dbAdmin權限。
- root:只在admin數據庫中可用。超級帳號,超級權限
MongoDB 配置
- 編輯配置文件:vim /etc/mongod.conf,注意:編輯完記得重啓 MongoDB 服務
- 默認的數據庫目錄:/var/lib/mongo
- 默認的日誌目錄:/var/log/mongodb
- 默認的配置文件內容:
bindIp:127.0.0.1 #註釋此行,表示除了本機也能夠登錄
# 補充這個,表示必須使用帶用戶名密碼的才能請求 mongodb,好比訪問 admin 數據庫:mongo 192.168.1.121:27017/admin -u 用戶名 -p 用戶密碼
security:
authorization: enabled
經常使用命令
- show dbs,查看已有數據庫
- use 數據庫名,進入指定數據庫,若是這個數據庫不存在了也是能夠進入的,進入以後 insert 一條語句就會自動建立了。
- db,顯示當前用的數據庫
- show collections,列出當前數據庫的collections(當前數據庫下的表)
- show tables,查看數據庫中的集
- exit,退出
- show users,查看當前庫下的用戶
- db.system.users.find().pretty(),查看全部用戶
- db.dropAllUsers(),刪除全部用戶
- db.dropDatebase(),刪除當前這個數據庫
- db.集名稱.find(),查看集中的全部數據,等同於:select * from 表名稱
- db.集名稱.findOne(),查看集中的一條數據,等同於:select * from 表名稱 limit 0,1
- db.集名稱.find().limit(10),查看集中的一條數據
- db.集名稱.find().sort({name:1}),查詢列表,根據字段name排序 #1正序 -1倒序
- db.集名稱.find().sort({x:1}).skip(5).limit(10),查詢列表,根據字段name排序,等同於 select from foo order by x asc limit 5, 10
- db.集名稱.find({x:10}),查詢列表,等同於 select from foo where x = 10
- db.集名稱.find({x: {$lt:10}}),select from foo where x <= 10
- db.集名稱.find({}, {y:true}),select y from foo
- db.集名稱.find({"address.city":"gz"}),搜索嵌套文檔address中city值爲gz的記錄
- db.集名稱.find({likes:"math"}),搜索數組
- db.集名稱.insert({"a":1,"b":2}),插入一個測試數據
- db.集名稱.find({name:"lichuang"}),根據索引或字段查找數據
- db.集名稱.update({name:"張三"},{$set:{name:"李四"}}),更新數據,等同於:UPDATE 表名 SET name='李四' WHERE name = '張三'
- db.集名稱.update({name:"張三"},{$set:{name:"李四"},{upsert:true},{multi:true}}),更新數據,等同於:UPDATE 表名 SET name='李四' WHERE name = '張三'。其中特殊的是 upsert 爲 true 的時候,表示若是沒有這條數據,則建立一條。multi 表示,全部知足條件的都進行更新,否則默認只找到的第一條更新。
- db.集名稱.remove({name:"lichuang"}),刪除數據,等同於:DELETE FROM 表名 WHERE name='lichuang'
- db.集名稱.drop(),刪除這個集合
- db.集名稱.getIndexes(),查看集合索引
- db.集名稱.dropIndex("name_1"),刪除索引
- db.集名稱.ensureIndex({title:1}),建立索引
- db.集名稱.ensureIndex({titile:1},{name:"indexname"}),建立索引,第二個屬性設置索引名稱
- db.集名稱.ensureIndex({titile:1},{unique:true/false}),建立惟一索引,第二個屬性設置爲true說明該字段中值不能重複,false能夠重複
- db.集名稱.ensureIndex({name:1,age:1}),複合索引
- db.集名稱.ensureIndex({"address.city":1}),在嵌套文檔的字段上建索引
- db.集名稱.insert({"article","text"}),全文索引,指定爲text類型,每一個數據集合中只容許建立一個全文索引
- db.adminCommand( {setParameter:1, textSearchEnabled:true}),開啓全文本索引功能
- 一些符號說明:
$lt ->less then 小於
$lte ->less than and equal 不大於
$lt ->less then 小於
$gt ->greater then 大於
$gte ->greater then and equal 不小於)
$ne ->not equal 不等於
導入 / 導出 / 備份 /還原
- 數據的導出、導入
- 導出:mongoexport -h 127.0.0.1 -u 用戶名 -p 密碼 -d 庫名 -c 集合名 -o /opt/mongodb.json --type json
- 導入:mongoimport -h 127.0.0.1 -u 用戶名 -p 密碼 -d 庫名 -c 集合名 --file /opt/mongodb.json --type json
Java 包
GUI 管理工具