MongoDB 是一個基于分布式文件存儲的半結構化的非關系型數據庫。在海量數據中,可以較高性能的處理存取操作。它是以 BSON 格式進行數據存儲(類似 JSON 格式,但類型更為豐富),因此對于復雜的數據類型...
MongoDB 是一個基于分布式文件存儲的半結構化的非關系型數據庫。在海量數據中,可以較高性能的處理存取操作。它是以 BSON 格式進行數據存儲(類似 JSON 格式,但類型更為豐富),因此對于復雜的數據類型,可以較輕松的保存和處理。同時,在非關系型數據庫陣容中,相比其他數據庫產品,它擁有更豐富的功能,并且與關系型數據庫類型,所以對于新手使用也能快速上手。
環境:CentOS 7
版本號:4.2.6 企業版
版本:免安版(TGZ)
安裝包
訪問官網鏈接下載鏈接:https://www.mongodb.com/download-center/enterprise
我這里使用的是企業版,下載選項如圖:
下載后得到壓縮包 mongodb-linux-x86_64-enterprise-rhel70-4.2.6.tgz
將下載的壓縮包上傳至對應目錄,然后進行解壓
>
tar
-
zxvf mongodb
-
linux
-
x86_64
-
enterprise
-
rhel70
-
4.2
.
6.tgz
配置文件
當前使用的是免安版,所以 mongoDB 的配置文件需要自己手動創建。如果使用的是安裝版,安裝后配置文件會在 /etc/mongod.conf 中。
創建配置前,先創建 data、log、run 三個目錄,分別對應的數據存儲目錄、日志目錄、進程 ID 保存目錄
>
mkdir
-
p
/
var
/
mongodb
/
data
>
mkdir
-
p
/
var
/
mongodb
/
log
>
mkdir
-
p
/
var
/
mongodb
/
run
創建 mongod.conf 在 /var/mongodb 目錄中,內容如下:
# mongod.conf
# for documentation of all options, see:
# http://docs.mongodb.org/manual/reference/configuration-options/
# where to write logging data.
systemLog
:
destination
:
file
logAppend
:
true
path
:
/var/
mongodb
/
log
/
mongo
.
log
# 日志文件路徑設置
# Where and how to store data.
storage
:
dbPath
:
/var/
mongodb
/
data
# 數據存儲路徑
journal
:
enabled
:
true
# engine:
# wiredTiger:
# how the process runs
processManagement
:
fork
:
true
# fork and run in background
pidFilePath
:
/var/
mongodb
/
run
/
mongod
.
pid
# location of pidfile
timeZoneInfo
:
/usr/
share
/
zoneinfo
# network interfaces
net
:
port
:
27017
# 端口號
bindIp
:
127.0
.
0.1
# 監聽 IP ,即可訪問 IP,默認是本機
security
:
authorization
:
enabled
#operationProfiling:
#replication:
#sharding:
## Enterprise-Only Options
#auditLog:
#snmp:
配置文件常用基本屬性:
屬性說明systemLog#destination日志輸出位置,file 或 syslog,使用 file 時,必須指定 pathsystemLog#logAppend當實例啟動時日志是否追加寫入到現有日志中
systemLog#path日志存放路徑storage#dbPath數據存儲路徑storage#journal#enabled日志是否永久性,可以用來恢復數據processManagement#fork是否后臺運行服務processManagement#pidFilePathpid 文件的存儲路徑processManagement#timeZoneInfo數據庫使用的時區路徑net#port數據使用的端口net#bindIp監聽客戶端連接的 IP,即可訪問的 IPsecurity#authorization是否啟動權限管控
服務啟停
將解壓后的安裝包 bin 路徑添加到環境變量 /etc/profile 中,在 PATH 上進行追加
PATH=$PATH:/usr/local/software/mongoDB/mongodb-linux-x86_64-enterprise-rhel70-4.2.6/bin
使用 /var/mongodb/mongod.conf 配置文件啟動:
>
mongod
-
f
/
var
/
mongodb
/
mongodb
.
conf
如圖所示,則啟動成功
啟動完成后,驗證是否正常運行
>
mongo
如果正常運行,則進入登錄頁面
創建賬號,并設置角色為 root
>
use admin
>
db
.
createUser
({
user
:
"xxxx"
,
pwd
:
"xxxxxx"
,
roles
:[
"root"
]})
設置賬號后,重新登錄,此時需要進行賬號權限校驗
>
mongo
-
u accont
-
p password
停止 MongoDB 服務,必須切換到 admin 數據庫
>
use admin
>
db
.
shutdownServer
()
在介紹幾本操作之前,現將常用的 MongoDB 對象與關系型數據庫進行類比,便于更好理解 MongoDB 對象。
MongoDB關系型數據庫Database(數據庫)Database(數據庫)
Collection(集合)Table(表)Document(文檔)Row(行)Field(字段)Column(列)
Database 的操作
數據創建和選擇,都是使用 usedb命令
查看所有數據庫
>
show dbs
刪除數據庫,先選擇再刪除
>
use db
>
db
.
dropDatabase
()
Collection 的操作
創建集合命令,同時,如果沒有先創建集合,插入數據時會自動創建集合
>
db
.
createCollection
(
collectionName
,
[
options
])
其中 options為可選參數,主要是數據的校驗規則,這里不展開分析。
查看數據庫中所有集合
>
show collections
選擇集合
>
db
.
getCollection
(
collectionName
)
或
>
db
.
collectionName
刪除集合
>
db
.
collectionName
.
drop
()
插入
MongoDB 插入方法有 insertOne()、insertMany()、insert()、save() 。其中 insert() 功能就包括了 insertOne() 和 insertMany() 功能。
insertOne
insertOne() 是向數據庫中插入一個文檔,語法格式為:
db
.
collect
.
insertOne
(
<
document
>,
{
writeConcern
:
<
document
>
}
)
指令 insertOne() 中參數:
document 參數為 插入的 BSON 數據
writeConcern 為寫入策略,是可選參數
向 MongoDB 的 ytao 數據庫中,插入一條 article 集合的數據
db
.
article
.
insertOne
(
{
title
:
"Dubbo 負載均衡的實現"
,
url
:
"https://ytao.top/2020/05/02/23-dubbo-loadbalance/"
,
author
:
"ytao"
}
)
數據庫數據為:
注意: 如果插入數據時,沒指定 _id ,則會自動生成 _id ;如果指定 _id ,則必須 _id 在數據庫中存在,否則會報錯插入失敗。
insertMany
insertMany() 方法是一次插入多個文檔,語法格式為:
db
.
collect
.
insertMany
(
[<
document
1
>,
<
document
2
>],
{
writeConcern
:
<
document
>,
ordered
:
<
boolean
>
}
)
參數 ordered為是否有序插入文檔,可選參數,默認 true。
向 MongoDB 的 ytao 數據庫中,插入了兩條 article 集合的數據
db
.
article
.
insertMany
(
[
{
title
:
"Netty中粘包/拆包處理"
,
url
:
"https://ytao.top/2019/12/09/10-netty/"
,
author
:
"ytao"
},
{
title
:
"WebSocket實現Web端即時通信"
,
url
:
"https://ytao.top/2019/11/17/7_websocket/"
,
author
:
"ytao"
}
]
)
插入后的數據
同理,與 insertOne() 相同,插入重復插入已存在的 _id ,否則報錯。
insert
insert() 可以插入單個或多個文檔,這個也是最較為常用的方法,其語法為
db
.
collect
.
insert
(
<
document
>
or
[<
document
1
>,
<
document
2
>],
{
writeConcern
:
<
document
>,
ordered
:
<
boolean
>
}
)
插入的文檔如果是單個,則類似 insertOne() 的插入方式;如果插入的文檔是多個,則類似 insertMany() 的插入方式。其中參數 writeConcern 和 ordered 都是一樣。
save
save() 也可以進行數據插入,當新插入的 _id 存在時,會將已存在的文檔進行覆蓋,如果 _id 不存在時,則類似 insertOne() 的方式插入。其操作語法:
db
.
collect
.
save
(
<
document
>,
{
writeConcern
:
<
document
>
}
)
更新
進行更新的方法有 * updateOne()、updateMany()、update()、replaceOne() 以及 save() *。其中 update() 包括 updateOne() 和 updateMany() 的功能。
update
通過 update() 可以更新一個或多個文檔,其語法:
db
.
collection
.
update
(
<
query
>,
<
update
>,
{
upsert
:
<
boolean
>,
multi
:
<
boolean
>,
writeConcern
<
document
>,
collation
:
<
document
>,
arrayFilters
:
[<
filter1
>,<
filter2
>]
}
)
update 的參數:
query:要更新文檔的查詢條件
update:要更新的字段
upsert:默認為 false。當設置 true 時,如果更新的條件沒有匹配到數據時,則插入此更新條件。反之,設為 false 時,則不插入。
multi:默認為 false。當查詢條件匹配到多條數據時,如果設置為 true,則會更新所有匹配的數據;如果設置為 false,則更新匹配出的第一條數據。
writeConcern:和上面 insert 的參數一樣。
collation:更新數據的排序規則。
arrayFilters:更新數據中數組格式數據的某個特定元素。
接下來就演示兩個例子,一個普通更新,一個帶使用 arrayFilters 數據的更新,這個比較難說明,但通過例子就容易理解。
更新前數據:
{
"_id"
:
ObjectId
(
"5ed299cee89845fb9ec805e4"
),
"title"
:
"WebSocket實現Web端即時通信"
,
"url"
:
"https://ytao.top/2019/11/17/7_websocket/"
,
"author"
:
"ytao"
}
案例一 將 author數據更新為 ["楊滔","ytao"]
db
.
article
.
update
(
{
title
:
"WebSocket實現Web端即時通信"
},
{
$set
:
{
author
:
[
"楊滔"
,
"ytao"
]}}
)
案例二 將 author數據 ["楊滔","ytao"]的 楊滔更新為 YangTao
db
.
article
.
update
(
{
title
:
"WebSocket實現Web端即時通信"
},
{
$set
:
{
"author.$[idx]"
:
"YangTao"
}},
{
arrayFilters
:[
{
"idx"
:
{
$eq
:
"楊滔"
}}
]
}
)
上面 idx表示數組中元素的位置。
更新后的數據
updateOne
updateOne() 只能更新一個文檔,和 update() 使用類似,將 multi參數值為 false 一樣,這里不再使用案例演示。
語法:
db
.
collection
.
updateOne
(
<
filter
>,
<
update
>,
{
upsert
:
<
boolean
>,
writeConcern
:
<
document
>,
collation
:
<
document
>,
arrayFilters
:
[
<
filterdocument1
>,
...
],
hint
:
<
document
|
string
>
}
)
hint是 4.2.1版本中新增的參數,用于指定更新文檔的索引。
updateMany
updateMany() 同樣和 update() 更新多個文檔使用一樣。
語法:
db
.
collection
.
updateMany
(
<
filter
>,
<
update
>,
{
upsert
:
<
boolean
>,
writeConcern
:
<
document
>,
collation
:
<
document
>,
arrayFilters
:
[
<
filterdocument1
>,
...
],
hint
:
<
document
|
string
>
}
)
replaceOne
replaceOne 將一個文檔完全覆蓋,并且不需要指定 _id。只能覆蓋一個文檔。
語法:
db
.
collection
.
replaceOne
(
<
filter
>,
<
replacement
>,
{
upsert
:
<
boolean
>,
writeConcern
:
<
document
>,
collation
:
<
document
>,
hint
:
<
document
|
string
>
}
)
save
save() 在更新中是指定 _id 的方式進行文檔覆蓋。即上文插入中的 save() 用法。
刪除
刪除文檔的方法有 deleteOne()、deleteMany()、remove()
deleteOne
deleteOne() 一次只能刪除一個文檔,其語法:
db
.
collection
.
deleteOne
(
<
filter
>,
{
writeConcern
:
<
document
>,
collation
:
<
document
>
}
)
filter為刪除文檔的過濾條件。
deleteMany
deleteMany() 一次可刪除多個匹配到的文檔,其語法:
db
.
collection
.
deleteMany
(
<
filter
>,
{
writeConcern
:
<
document
>,
collation
:
<
document
>
}
)
remove
remove() 是刪除查詢出的文檔,其語法有兩個:
db
.
collection
.
remove
(
<
query
>,
<
justOne
>
)
或者
db
.
collection
.
remove
(
<
query
>,
{
justOne
:
<
boolean
>,
writeConcern
:
<
document
>,
collation
:
<
document
>
}
)
justOne參數默認為 false,表示刪除全部匹配到的數據;true 表示只刪除第一個文檔
查詢
MongoDB 中常用的基本查詢有 * findOne() * 和 * find() *。
findOne
findOne() 只返回匹配到的第一個文檔,語法為:
db
.
collection
.
findOne
(
<
query
>,
<
projection
>
)
參數說明:
query 表示查詢條件。
projection 表示返回的字段(Field)。
下面查詢一個文檔,并且只返回 title和 url
通過指定字段的 value 為 1,即表示查詢后返回的字段。
find
find() 是返回所有匹配到的集合,語法為:
db
.
collection
.
find
(
<
query
>,
<
projection
>
)
下面案例查詢查詢結果:
本文對 MongoDB 的入門和基本操作進行了簡單的了解,在這使用過程中,有點類似關系型數據庫操作的影子,所以對有關系型數據庫使用經驗的人,上手是較為簡單的。
更多使用操作,官方文檔:https://docs.mongodb.com/manual/reference/
來源:本文內容搜集或轉自各大網絡平臺,并已注明來源、出處,如果轉載侵犯您的版權或非授權發布,請聯系小編,我們會及時審核處理。
聲明:江蘇教育黃頁對文中觀點保持中立,對所包含內容的準確性、可靠性或者完整性不提供任何明示或暗示的保證,不對文章觀點負責,僅作分享之用,文章版權及插圖屬于原作者。
Copyright?2013-2024 JSedu114 All Rights Reserved. 江蘇教育信息綜合發布查詢平臺保留所有權利
蘇公網安備32010402000125
蘇ICP備14051488號-3技術支持:南京博盛藍睿網絡科技有限公司
南京思必達教育科技有限公司版權所有 百度統計