目錄
- 01 基本介紹
- 02 常用參數(shù)
- 03 命令
- 04 經(jīng)驗(yàn)值
- 05 反向?qū)?br />
01 基本介紹
mongoexport是一個(gè)數(shù)據(jù)導(dǎo)出的工具,使用的時(shí)候類(lèi)似mysql中的select into outfile語(yǔ)法,可以將某個(gè)數(shù)據(jù)庫(kù)中的數(shù)據(jù)以json或者csv的格式導(dǎo)出來(lái)。
我們可以通過(guò)直接連接mongos或者連接mongod來(lái)導(dǎo)出數(shù)據(jù)。如果你的集群是分片集群,連接mongos會(huì)導(dǎo)出所有分片上這個(gè)集合的相關(guān)數(shù)據(jù)。
02 常用參數(shù)
-h:指明數(shù)據(jù)庫(kù)宿主機(jī)的IP
-u:指明數(shù)據(jù)庫(kù)的用戶名
-p:指明數(shù)據(jù)庫(kù)的密碼
-d:指明數(shù)據(jù)庫(kù)的名字
-c:指明collection的名字
-f:指明要導(dǎo)入那些列
--type:默認(rèn)是json類(lèi)型,可以導(dǎo)出csv類(lèi)型
-o:指明要導(dǎo)出的文件名稱,如果不指定,則導(dǎo)出到標(biāo)準(zhǔn)輸出
-q:查詢過(guò)濾器,可以輸入一個(gè)json,從而導(dǎo)出查詢后的結(jié)果
上面的常用參數(shù)還有對(duì)應(yīng)的長(zhǎng)參數(shù)選項(xiàng),例如-h也可以輸入--host代替。參數(shù)的詳細(xì)介紹,可以通過(guò)mongoexport --help獲取到。
03 命令
1、導(dǎo)出數(shù)據(jù)庫(kù)new下面的test集合的number字段,命令如下:
mongoexport --port=27016 -u "yeyz" --authenticationDatabase "admin" -p "123456" -d new -c test --fields=number -o /data/test.json
2021-02-23T22:09:52.481+0800 connected to: localhost:27016
2021-02-23T22:09:52.512+0800 exported 2000 records
我們看下導(dǎo)出的結(jié)果:
{"_id":{"$oid":"6006c46993a711b384cc8c92"},"number":1000.0}
{"_id":{"$oid":"6006c46993a711b384cc8c93"},"number":1001.0}
{"_id":{"$oid":"6006c46993a711b384cc8c94"},"number":1002.0}
{"_id":{"$oid":"6006c46993a711b384cc8c95"},"number":1003.0}
{"_id":{"$oid":"6006c46993a711b384cc8c96"},"number":1004.0}
{"_id":{"$oid":"6006c46993a711b384cc8c97"},"number":1005.0}
{"_id":{"$oid":"6006c46993a711b384cc8c98"},"number":1006.0}
{"_id":{"$oid":"6006c46993a711b384cc8c99"},"number":1007.0}
{"_id":{"$oid":"6006c46993a711b384cc8c9a"},"number":1008.0}
{"_id":{"$oid":"6006c46993a711b384cc8c9b"},"number":1009.0}
{"_id":{"$oid":"6006c46993a711b384cc8c9c"},"number":1010.0}
{"_id":{"$oid":"6006c46993a711b384cc8c9d"},"number":1011.0}
{"_id":{"$oid":"6006c46993a711b384cc8c9e"},"number":1012.0}
可以看到,即使我們只指定了number字段,也會(huì)自動(dòng)為我們導(dǎo)出_id字段,由此可以得出結(jié)論,:如果導(dǎo)出的格式是json類(lèi)型的,_id字段是默認(rèn)導(dǎo)出的。
默認(rèn)導(dǎo)出的類(lèi)型是json類(lèi)型,如果我們想導(dǎo)出csv類(lèi)型,可以增加--type=csv參數(shù)。添加了這個(gè)參數(shù)之后,結(jié)果如下:
number
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
可以看到,就不會(huì)自動(dòng)的輸出_id這個(gè)字段了。這個(gè)可能也是一個(gè)值得討論的點(diǎn)。我認(rèn)為可能是這個(gè)工具的一個(gè)小bug,csv類(lèi)型不輸出_id字段,而json類(lèi)型輸出_id字段。
2、導(dǎo)出某個(gè)特定的查詢結(jié)果,例如導(dǎo)出number=10的那條記錄:
[root@VM-0-14-centos ~]# mongoexport --port=27016 -u "yeyz" --authenticationDatabase "admin" -p "123456" -d new -c test --type=csv -q {"number":10} --fields=number -o /data/test.json
2021-02-23T22:38:18.319+0800 connected to: localhost:27016
2021-02-23T22:38:18.321+0800 exported 1 record
可以直接在-q參數(shù)后面跟查詢條件。
04 經(jīng)驗(yàn)值
今天的操作是在分片集群上進(jìn)行操作的,一共7個(gè)分片,我導(dǎo)出了3億多條數(shù)據(jù),單個(gè)分片上大概5000w條數(shù)據(jù)吧,每條數(shù)據(jù)導(dǎo)出2個(gè)字段,每個(gè)分片上的導(dǎo)出時(shí)間大約在2個(gè)小時(shí)左右。
機(jī)器硬件配置:
- SATA硬盤(pán)4TB
- 普通內(nèi)存128G
- intel 至強(qiáng)E5-4系列
當(dāng)然,這個(gè)值只是個(gè)經(jīng)驗(yàn)值,如果你的導(dǎo)出的字段比較多的話,或者字段的長(zhǎng)度比較長(zhǎng),可能這個(gè)值沒(méi)有太多的參考意義。
在實(shí)際進(jìn)行數(shù)據(jù)導(dǎo)出的時(shí)候,發(fā)現(xiàn)執(zhí)行導(dǎo)出的mongodb服務(wù)器負(fù)載有一定上升,內(nèi)存使用率有一定上升,但是沒(méi)有特別明顯性能抖動(dòng),整個(gè)過(guò)程不會(huì)鎖數(shù)據(jù)庫(kù),所以還是比較安全的。
線上操作的時(shí)候,尤其是針對(duì)敏感的業(yè)務(wù),為了最大程度上降低對(duì)業(yè)務(wù)的影響,如果你是在mongos上執(zhí)行數(shù)據(jù)導(dǎo)出,建議先保證這個(gè)mongos對(duì)業(yè)務(wù)不可見(jiàn),執(zhí)行導(dǎo)出之后,在重新對(duì)外提供服務(wù);如果你是在mongod上進(jìn)行數(shù)據(jù)導(dǎo)出,則最好選擇secondary節(jié)點(diǎn)進(jìn)行,避免對(duì)線上業(yè)務(wù)的影響。
05 反向?qū)?br />
mongodb還有一個(gè)工具,叫mongoimport,可以將mongoexport導(dǎo)出的數(shù)據(jù)導(dǎo)入到mongodb數(shù)據(jù)庫(kù)中,下面是一個(gè)mongoimport的命令:
[root@VM-0-14-centos ~]# mongoimport --port=27016 -u "yeyz" --authenticationDatabase "admin" -p "123456" -d new -c test1 --type=csv --fields=number --file=/data/test.csv
2021-02-23T22:44:21.930+0800 connected to: localhost:27016
2021-02-23T22:44:22.146+0800 imported 2001 documents
mongoimport的整個(gè)操作類(lèi)似insert操作,參數(shù)方面和mongoexport大同小異,唯一多的比較重要的參數(shù)就是writeconcern的值,這個(gè)值設(shè)置的級(jí)別越高,那么導(dǎo)出數(shù)據(jù)的時(shí)間就越慢,但是數(shù)據(jù)安全性會(huì)越高。
詳細(xì)內(nèi)容請(qǐng)看官方文檔對(duì)writeconcern的描述。
今天的內(nèi)容就到這里。
以上就是MongoDB mongoexport工具的使用簡(jiǎn)介的詳細(xì)內(nèi)容,更多關(guān)于MongoDB mongoexport工具的使用的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
您可能感興趣的文章:- MongoDB使用mongoexport和mongoimport命令,批量導(dǎo)出和導(dǎo)入JSON數(shù)據(jù)到同一張表的實(shí)例
- MongoDB執(zhí)行mongoexport時(shí)的異常及分析(數(shù)字類(lèi)型的查詢)