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