最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MongoDB執(zhí)行mongoexport時(shí)的異常及分析(數(shù)字類(lèi)型的查詢(xún))

 更新時(shí)間:2018年09月09日 15:06:26   作者:東山絮柳仔  
這篇文章主要給大家介紹了關(guān)于MongoDB執(zhí)行mongoexport時(shí)的異常及分析(數(shù)字類(lèi)型的查詢(xún))的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

概述

mongoexport命令行用于數(shù)據(jù)的導(dǎo)出,默認(rèn)導(dǎo)出的文件格式為JSON格式。當(dāng)然也可以指定特定的文件格式。

語(yǔ)法

C:\mongo\bin>mongoexport -help
options:
  --help                  produce help message
  -v [ --verbose ]        be more verbose (include multiple times for more
                          verbosity e.g. -vvvvv)
  -h [ --host ] arg       mongo host to connect to ( <set name>/s1,s2 for sets)
  --port arg              server port. Can also use --host hostname:port
  --ipv6                  enable IPv6 support (disabled by default)
  -u [ --username ] arg   username
  -p [ --password ] arg   password
  --dbpath arg            directly access mongod database files in the given
                          path, instead of connecting to a mongod  server -
                          needs to lock the data directory, so cannot be used
                          if a mongod is currently accessing the same path
  --directoryperdb        if dbpath specified, each db is in a separate
                          directory
  -d [ --db ] arg         database to use
  -c [ --collection ] arg collection to use (some commands)
  -f [ --fields ] arg     comma separated list of field names e.g. -f name,age
  --fieldFile arg         file with fields names - 1 per line
  -q [ --query ] arg      query filter, as a JSON string
  --csv                   export to csv instead of json
  -o [ --out ] arg        output file; if not specified, stdout is used
  --jsonArray             output to a json array rather than one object per
                          Line

說(shuō)明:

  • -h:數(shù)據(jù)庫(kù)宿主機(jī)的IP
  • -u:數(shù)據(jù)庫(kù)用戶(hù)名
  • -p:數(shù)據(jù)庫(kù)密碼
  • -d:數(shù)據(jù)庫(kù)名字
  • -c:集合的名字
  • -f:導(dǎo)出的列名
  • -q:導(dǎo)出數(shù)據(jù)的過(guò)濾條件
  • --csv:導(dǎo)出格式為csv 

引言

今天在用mongoexport導(dǎo)出滿足一定條件下的數(shù)據(jù)時(shí),遇到了一個(gè)報(bào)錯(cuò),現(xiàn)紀(jì)錄下來(lái),并且針對(duì)此錯(cuò)誤對(duì)MongoDB 的 數(shù)字類(lèi)型做了進(jìn)一步的學(xué)習(xí)。

背景 及 報(bào)錯(cuò)信息

今天接到一個(gè)業(yè)務(wù)需求,需要從MongoDB 數(shù)據(jù)庫(kù) order集合中導(dǎo)出符合以下條件的數(shù)據(jù):

db.qqwj_order.find({"Source":NumberInt("21"),"Batch":"支付中的訂單提醒:2018/9/5","MsgContent":/還未完成在線付款/})

通過(guò)MongoDB 客戶(hù)端工具 【NoSQLBooster for MongoDB】查詢(xún)檢查,語(yǔ)句執(zhí)行正常,顯示相應(yīng)記錄數(shù)為 15265。

導(dǎo)出數(shù)據(jù)使用mongoexport命令,執(zhí)行命令如下:

/data/mongodb/mongobin344/bin/mongoexport -h 172.X.X.XXX --port 端口 --db 數(shù)據(jù)庫(kù) -u 賬號(hào) -p '密碼' --authenticationDatabase 認(rèn)證數(shù)據(jù)庫(kù) --type=csv -c qqwj_order -f MsgContent,REC_CreateTime -q '{ "Source":NumberInt("21"),"Batch":"支付中的訂單提醒:2018/9/5","MsgContent":/還未完成在線付款/}' -o /data/mongodb_back/sms.csv

但是執(zhí)行報(bào)錯(cuò):

XXX is not valid JSON: json: cannot unmarshal string into Go value of type json.NumberInt

錯(cuò)誤截圖如下:

錯(cuò)誤推斷及測(cè)試

因?yàn)閳?bào)錯(cuò)信息中NumberInt 關(guān)鍵字,此時(shí)去看我們的查詢(xún)條件正好也有此關(guān)鍵字,所以推測(cè) 是不是這個(gè)問(wèn)題。

結(jié)果將導(dǎo)出命令中的 NumberInt("21") 直接替換為 21 ,再次執(zhí)行。

執(zhí)行命令為 :

/data/mongodb/mongobin344/bin/mongoexport -h 172.X.X.XXX --port 端口 --db 數(shù)據(jù)庫(kù) -u 賬號(hào) -p '密碼' --authenticationDatabase 認(rèn)證數(shù)據(jù)庫(kù) --type=csv -c qqwj_order -f MsgContent,REC_CreateTime -q '{"Source":21,"Batch":"支付中的訂單提醒:2018/9/5","MsgContent":/還未完成在線付款/}' -o /data/mongodb_back/sms.csv

執(zhí)行結(jié)果為

結(jié)果表明修改后,數(shù)據(jù)成功導(dǎo)出。

錯(cuò)誤解析與原理探究

為什么通過(guò)查詢(xún)器查看,數(shù)據(jù)就是 "Source" : NumberInt("21") ,但是在shell 中的執(zhí)行導(dǎo)出命令寫(xiě)成"Source" : NumberInt("21") 就會(huì)報(bào)錯(cuò)。而一定要轉(zhuǎn)換為"Source":21

查詢(xún)器查詢(xún)出的Source字段顯示:

明明就是"Source" : NumberInt("21") ,為什么復(fù)制到shell,執(zhí)行報(bào)錯(cuò)???

回頭看,找原理。我們知道目前MongoDB 支持4中數(shù)據(jù)類(lèi)型。

  • double
  • 32-bit integer
  • 64-bit integer
  • Decimal (New in version 3.4.)

在MongoDB客戶(hù)端可以執(zhí)行查詢(xún),但是在shell中無(wú)法執(zhí)行導(dǎo)出,那么會(huì)不會(huì)和這兩種工具有關(guān)?會(huì)不會(huì)和插入的NumberInt(數(shù)字) 還是NumberInt('數(shù)字‘)有關(guān)?

下面對(duì)假設(shè)進(jìn)行驗(yàn)證測(cè)試。

通過(guò) NoSQLBooster for MongoDB 方式 插入測(cè)試數(shù)據(jù)

通過(guò) shell方式插入測(cè)試數(shù)據(jù)

通過(guò)$type 去查看插入的數(shù)據(jù)類(lèi)型

1》執(zhí)行db.numbers.find({n:{$type:1}}) // Type 為 Double;查詢(xún)Type 為 Double的數(shù)據(jù)

以上查詢(xún)結(jié)果顯示,不管是通過(guò)客戶(hù)端還是shell,當(dāng)數(shù)字不指明數(shù)據(jù)類(lèi)型時(shí),插入的數(shù)字?jǐn)?shù)據(jù)默認(rèn)都是Double。

2》執(zhí)行命令 db.numbers.find({n:{$type:16}}) // Type 為 32-bit integer ;查詢(xún)Type 為 32-bit integer的數(shù)據(jù)

以上查詢(xún)表名,不管通過(guò)客戶(hù)端還是shell,指定的NumberInt(5) 還是NumberInt('5‘) 后臺(tái)都轉(zhuǎn)成統(tǒng)一32-bit integer 類(lèi)型存儲(chǔ)了。

3》執(zhí)行命令 db.numbers.find({n:{$type:18}}) // Type 為 64-bit integer 查詢(xún)Type 為 64-bit integer的數(shù)據(jù)

以上查詢(xún)表名,不管通過(guò)客戶(hù)端還是shell,指定的NumberLong(5) 還是NumberLong('5') 后臺(tái)都轉(zhuǎn)成統(tǒng)一64-bit integer 類(lèi)型存儲(chǔ)了。

以上的測(cè)試說(shuō)明,當(dāng)我們?cè)诖鎯?chǔ)數(shù)字?jǐn)?shù)據(jù)時(shí)會(huì)自動(dòng)轉(zhuǎn)儲(chǔ)(不管什么客戶(hù)端工具,是shell還是 【NoSQLBooster for MongoDB】,不管 NumberLong(5) 還是NumberLong('5');NumberInt(5) 還是NumberInt('5‘))。

有點(diǎn)糊涂了吧? 如此這樣,那為什么 在查詢(xún)是報(bào)錯(cuò)呢?

回頭再看錯(cuò)誤提示:XXX is not valid JSON: json: cannot unmarshal string into Go value of type json.NumberInt。

其意思是shell 認(rèn)為我們把一個(gè)字符類(lèi)型的數(shù)據(jù)傳給了 json.NumberInt 。

那我如果將導(dǎo)出命令中的 NumberInt("21") 將 換成 NumberInt(21)

執(zhí)行命令為 :

/data/mongodb/mongobin344/bin/mongoexport -h 172.X.X.XXX --port 端口 --db 數(shù)據(jù)庫(kù) -u 賬號(hào) -p '密碼' --authenticationDatabase 認(rèn)證數(shù)據(jù)庫(kù) --type=csv -c qqwj_order -f MsgContent,REC_CreateTime -q '{"Source": NumberInt(21),"Batch":"支付中的訂單提醒:2018/9/5","MsgContent":/還未完成在線付款/}' -o /data/mongodb_back/sms.csv

執(zhí)行也成功。

結(jié)論

說(shuō)了很多總結(jié)下:

執(zhí)行失敗的導(dǎo)出命令是:

/data/mongodb/mongobin344/bin/mongoexport -h 172.X.X.XXX --port 端口 --db 數(shù)據(jù)庫(kù) -u 賬號(hào) -p '密碼' --authenticationDatabase 認(rèn)證數(shù)據(jù)庫(kù) --type=csv -c qqwj_order -f MsgContent,REC_CreateTime -q '{ "Source":NumberInt("21"),"Batch":"支付中的訂單提醒:2018/9/5","MsgContent":/還未完成在線付款/}' -o /data/mongodb_back/sms.csv

執(zhí)行成功的導(dǎo)出命令是:

/data/mongodb/mongobin344/bin/mongoexport -h 172.X.X.XXX --port 端口 --db 數(shù)據(jù)庫(kù) -u 賬號(hào) -p '密碼' --authenticationDatabase 認(rèn)證數(shù)據(jù)庫(kù) --type=csv -c qqwj_order -f MsgContent,REC_CreateTime -q '{"Source":21,"Batch":"支付中的訂單提醒:2018/9/5","MsgContent":/還未完成在線付款/}' -o /data/mongodb_back/sms.csv

/data/mongodb/mongobin344/bin/mongoexport -h 172.X.X.XXX --port 端口 --db 數(shù)據(jù)庫(kù) -u 賬號(hào) -p '密碼' --authenticationDatabase 認(rèn)證數(shù)據(jù)庫(kù) --type=csv -c qqwj_order -f MsgContent,REC_CreateTime -q '{"Source": NumberInt(21),"Batch":"支付中的訂單提醒:2018/9/5","MsgContent":/還未完成在線付款/}' -o /data/mongodb_back/sms.csv

三個(gè)導(dǎo)出命令不同的地方已用紅色字體標(biāo)注。

P.S 1 :后來(lái)作者深究了一下,為什么同樣的查詢(xún),通樣的查詢(xún)結(jié)果,有的顯示 "n" : 5 ; 有的顯示 "n" : NumberInt("5")。嘻嘻 》》》》版本不同而已。

舊版本(部分)的顯示

新版本(例如nosqlbooster4mongo-4.7.1)的顯示

P.S 2 :在存儲(chǔ)數(shù)字?jǐn)?shù)據(jù)時(shí),到底會(huì)存儲(chǔ)為何種數(shù)據(jù)類(lèi)型,其實(shí)和語(yǔ)言的的驅(qū)動(dòng)有關(guān)。例如在Ruby 和 Python 語(yǔ)言里在序列化整數(shù)時(shí),驅(qū)動(dòng)會(huì)自動(dòng)確定是否編碼為32-bit integer 還是64-bit integer;shell 需要顯示指定才可以。+

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • 阿里云服務(wù)器安裝mongodb的方法

    阿里云服務(wù)器安裝mongodb的方法

    這篇文章主要介紹了阿里云服務(wù)器安裝mongodb的方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-11-11
  • Mongodb增加、移除Arbiter節(jié)點(diǎn)實(shí)例

    Mongodb增加、移除Arbiter節(jié)點(diǎn)實(shí)例

    這篇文章主要介紹了Mongodb增加、移除Arbiter節(jié)點(diǎn)實(shí)例,Arbiter是搭建Mongodb集群的一個(gè)必備節(jié)點(diǎn),需要的朋友可以參考下
    2015-01-01
  • MongoDB用Mongoose得到的對(duì)象不能增加屬性完美解決方法(兩種)

    MongoDB用Mongoose得到的對(duì)象不能增加屬性完美解決方法(兩種)

    本文給大家分享兩種解決方案解決MongoDB用Mongoose得到的對(duì)象不能增加屬性問(wèn)題,本文給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2017-11-11
  • MongoDB中javascript腳本編程簡(jiǎn)介和入門(mén)實(shí)例

    MongoDB中javascript腳本編程簡(jiǎn)介和入門(mén)實(shí)例

    作為一個(gè)數(shù)據(jù)庫(kù),MongoDB有一個(gè)很大的優(yōu)勢(shì)——它使用js管理數(shù)據(jù)庫(kù),所以也能夠使用js腳本進(jìn)行復(fù)雜的管理——這種方法非常靈活
    2014-04-04
  • MongoDB中對(duì)文檔的增刪查改基本操作方法總結(jié)

    MongoDB中對(duì)文檔的增刪查改基本操作方法總結(jié)

    MongoDB是一個(gè)NoSQL數(shù)據(jù)庫(kù),其中document文檔就相當(dāng)于關(guān)系型數(shù)據(jù)庫(kù)中的行,這里我們初步整理了MongoDB中對(duì)文檔的增刪查改基本操作方法總結(jié),需要的朋友可以參考下:
    2016-06-06
  • Centos系統(tǒng)搭建MongoDB數(shù)據(jù)庫(kù)

    Centos系統(tǒng)搭建MongoDB數(shù)據(jù)庫(kù)

    這篇文章介紹了Centos系統(tǒng)搭建MongoDB數(shù)據(jù)庫(kù)的方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • mongodb中按天進(jìn)行聚合查詢(xún)的實(shí)例教程

    mongodb中按天進(jìn)行聚合查詢(xún)的實(shí)例教程

    這篇文章主要給大家介紹了關(guān)于mongodb中按天進(jìn)行聚合查詢(xún)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用mongodb具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • c#操作mongodb插入數(shù)據(jù)效率

    c#操作mongodb插入數(shù)據(jù)效率

    今天小編就為大家分享一篇關(guān)于c#操作mongodb插入數(shù)據(jù)效率,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-01-01
  • MongoDB索引的用法介紹

    MongoDB索引的用法介紹

    這篇文章介紹了MongoDB索引的用法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • MongoDB內(nèi)存過(guò)高問(wèn)題分析及解決

    MongoDB內(nèi)存過(guò)高問(wèn)題分析及解決

    有個(gè)3.2.7版本的mongo復(fù)制集,最近幾天頻繁告警內(nèi)存過(guò)高,所以這篇文章給大家介紹了MongoDB內(nèi)存過(guò)高問(wèn)題分析及解決。并通過(guò)代碼示例給出詳細(xì)的解決方案,需要的朋友可以參考下
    2024-03-03

最新評(píng)論

锦州市| 泾川县| 德昌县| 揭东县| 麻江县| 从江县| 广宗县| 黎城县| 襄垣县| 衡水市| 西青区| 尚义县| 乡宁县| 子洲县| 奇台县| 郸城县| 土默特左旗| 桃园县| 泾源县| 旬阳县| 布尔津县| 广宁县| 中宁县| 高陵县| 安塞县| 从江县| 介休市| 鄱阳县| 天祝| 石城县| 堆龙德庆县| 璧山县| 桓台县| 阿城市| 海丰县| 林口县| 巫山县| 新密市| 巴中市| 日喀则市| 闵行区|