亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > MongoDB > 正文

MongoDB執行mongoexport時的異常及分析(數字類型的查詢)

2020-03-14 12:49:43
字體:
來源:轉載
供稿:網友

概述

mongoexport命令行用于數據的導出,默認導出的文件格式為JSON格式。當然也可以指定特定的文件格式。

語法

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

說明:

  • -h:數據庫宿主機的IP
  • -u:數據庫用戶名
  • -p:數據庫密碼
  • -d:數據庫名字
  • -c:集合的名字
  • -f:導出的列名
  • -q:導出數據的過濾條件
  • --csv:導出格式為csv 

引言

今天在用mongoexport導出滿足一定條件下的數據時,遇到了一個報錯,現紀錄下來,并且針對此錯誤對MongoDB 的 數字類型做了進一步的學習。

背景 及 報錯信息

今天接到一個業務需求,需要從MongoDB 數據庫 order集合中導出符合以下條件的數據:

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

通過MongoDB 客戶端工具 【NoSQLBooster for MongoDB】查詢檢查,語句執行正常,顯示相應記錄數為 15265。

MongoDB,mongoexport,異常

導出數據使用mongoexport命令,執行命令如下:

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

但是執行報錯:

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

錯誤截圖如下:

MongoDB,mongoexport,異常

錯誤推斷及測試

因為報錯信息中NumberInt 關鍵字,此時去看我們的查詢條件正好也有此關鍵字,所以推測 是不是這個問題。

結果將導出命令中的 NumberInt("21") 直接替換為 21 ,再次執行。

執行命令為 :

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

執行結果為

MongoDB,mongoexport,異常

結果表明修改后,數據成功導出。

錯誤解析與原理探究

為什么通過查詢器查看,數據就是 "Source" : NumberInt("21") ,但是在shell 中的執行導出命令寫成"Source" : NumberInt("21") 就會報錯。而一定要轉換為"Source":21

查詢器查詢出的Source字段顯示:

MongoDB,mongoexport,異常

明明就是"Source" : NumberInt("21") ,為什么復制到shell,執行報錯???

回頭看,找原理。我們知道目前MongoDB 支持4中數據類型。

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

在MongoDB客戶端可以執行查詢,但是在shell中無法執行導出,那么會不會和這兩種工具有關?會不會和插入的NumberInt(數字) 還是NumberInt('數字‘)有關?

下面對假設進行驗證測試。

通過 NoSQLBooster for MongoDB 方式 插入測試數據

MongoDB,mongoexport,異常

通過 shell方式插入測試數據

MongoDB,mongoexport,異常

通過$type 去查看插入的數據類型

1》執行db.numbers.find({n:{$type:1}}) // Type 為 Double;查詢Type 為 Double的數據

MongoDB,mongoexport,異常

以上查詢結果顯示,不管是通過客戶端還是shell,當數字不指明數據類型時,插入的數字數據默認都是Double。

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

MongoDB,mongoexport,異常

以上查詢表名,不管通過客戶端還是shell,指定的NumberInt(5) 還是NumberInt('5‘) 后臺都轉成統一32-bit integer 類型存儲了。

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

MongoDB,mongoexport,異常

以上查詢表名,不管通過客戶端還是shell,指定的NumberLong(5) 還是NumberLong('5') 后臺都轉成統一64-bit integer 類型存儲了。

以上的測試說明,當我們在存儲數字數據時會自動轉儲(不管什么客戶端工具,是shell還是 【NoSQLBooster for MongoDB】,不管 NumberLong(5) 還是NumberLong('5');NumberInt(5) 還是NumberInt('5‘))。

有點糊涂了吧? 如此這樣,那為什么 在查詢是報錯呢?

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

其意思是shell 認為我們把一個字符類型的數據傳給了 json.NumberInt 。

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

執行命令為 :

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

MongoDB,mongoexport,異常

執行也成功。

結論

說了很多總結下:

執行失敗的導出命令是:

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

執行成功的導出命令是:

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

三個導出命令不同的地方已用紅色字體標注。

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

舊版本(部分)的顯示

MongoDB,mongoexport,異常

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

MongoDB,mongoexport,異常

P.S 2 :在存儲數字數據時,到底會存儲為何種數據類型,其實和語言的的驅動有關。例如在Ruby 和 Python 語言里在序列化整數時,驅動會自動確定是否編碼為32-bit integer 還是64-bit integer;shell 需要顯示指定才可以。+

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網的支持。


注:相關教程知識閱讀請移步到MongoDB頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91最新国产视频| 精品亚洲夜色av98在线观看| 91精品国产自产在线| 日本精品久久久久久久| 国产噜噜噜噜久久久久久久久| 在线电影欧美日韩一区二区私密| 亚洲欧洲一区二区三区在线观看| 国产亚洲精品成人av久久ww| 欧美黑人xxx| 亚洲美女性生活视频| 精品久久在线播放| 亚洲色无码播放| 国产精品99久久久久久www| 国产成人综合亚洲| 性色av香蕉一区二区| 欧美性xxxxxxxxx| 欧美性猛交xxxx免费看漫画| 日韩在线免费观看视频| 欧美一性一乱一交一视频| 亚洲精品视频播放| 秋霞成人午夜鲁丝一区二区三区| 国产精品av电影| 国产精品久久久久久av下载红粉| 欧美激情亚洲自拍| 久久躁狠狠躁夜夜爽| 日韩免费高清在线观看| 国产精品男女猛烈高潮激情| 成人激情在线播放| 亚洲欧美国产一本综合首页| 日韩视频免费观看| 国产在线观看精品| 日韩精品中文字幕在线播放| 美女扒开尿口让男人操亚洲视频网站| 精品久久久久久久久久久| 亚洲二区在线播放视频| 日韩日本欧美亚洲| 亚洲第一精品夜夜躁人人爽| 亚洲一区二区三区四区在线播放| 久久国产加勒比精品无码| 亚洲精品www| 久久综合国产精品台湾中文娱乐网| 欧美国产亚洲精品久久久8v| 久久人人97超碰精品888| 97色在线视频| 日韩av影视在线| 高清欧美性猛交xxxx黑人猛交| 午夜美女久久久久爽久久| 国产精品极品尤物在线观看| 欧美久久精品午夜青青大伊人| 成人在线中文字幕| 亚洲日本中文字幕| 国产精品久久久久免费a∨| 精品视频久久久| 久久久久久久久网站| 不卡av日日日| 国产亚洲一区精品| 久久精品国产久精国产思思| 久久99精品久久久久久青青91| 乱亲女秽乱长久久久| 日韩免费av在线| 性欧美在线看片a免费观看| 国产精品网红福利| 97久久精品人人澡人人爽缅北| 久久综合伊人77777| www.xxxx精品| 亚洲一级免费视频| 国产福利精品在线| 久久精品国产成人精品| 国产精品丝袜久久久久久高清| 国产欧美日韩免费看aⅴ视频| 久久五月情影视| 成人美女av在线直播| 久久久久久国产三级电影| 亚洲影视九九影院在线观看| 精品人伦一区二区三区蜜桃免费| 午夜伦理精品一区| 中文字幕欧美日韩精品| 伦伦影院午夜日韩欧美限制| 国产精品免费福利| 日本欧美黄网站| 国产精品入口福利| 狠狠综合久久av一区二区小说| 成人免费在线视频网站| 海角国产乱辈乱精品视频| 日韩成人激情视频| 日韩在线不卡视频| 欧美俄罗斯乱妇| 日韩精品极品毛片系列视频| 日本久久久久久久久| 亚洲成色777777在线观看影院| 亚洲欧美日本另类| 国产精品专区h在线观看| 一区二区三区高清国产| 中文字幕精品www乱入免费视频| 精品偷拍各种wc美女嘘嘘| 中文字幕日韩欧美在线视频| 久热精品视频在线观看| 欧美疯狂性受xxxxx另类| 亚洲自拍高清视频网站| 国内精品久久久久久中文字幕| 最好看的2019年中文视频| 青青草精品毛片| 国产欧美日韩免费看aⅴ视频| 日韩av在线免费看| 超碰97人人做人人爱少妇| 日韩在线视频线视频免费网站| 久久精品国产亚洲精品| 日韩视频一区在线| 国产成人aa精品一区在线播放| 国产精品美乳在线观看| 国产精品扒开腿爽爽爽视频| 亚洲欧洲日本专区| 午夜精品一区二区三区在线| 亚洲综合在线中文字幕| 国产自产女人91一区在线观看| 在线中文字幕日韩| 黑人巨大精品欧美一区二区一视频| 国产一区二区三区18| 欧美日韩在线第一页| 97国产一区二区精品久久呦| 色偷偷888欧美精品久久久| 久久99青青精品免费观看| 中文字幕av一区二区三区谷原希美| 国产精品久久久久久久久久小说| 懂色av中文一区二区三区天美| 日韩中文字幕在线播放| 国产精品久久婷婷六月丁香| 亚洲丝袜av一区| 亚洲精品国产综合区久久久久久久| 欧美性极品xxxx做受| 日韩中文字幕免费| 日韩69视频在线观看| 欧美日韩国产精品| 免费91麻豆精品国产自产在线观看| 久久噜噜噜精品国产亚洲综合| 亚洲欧美国产精品va在线观看| 久久国产天堂福利天堂| 国产精品久久久久久久av大片| 青草成人免费视频| 26uuu久久噜噜噜噜| 亚洲精品影视在线观看| 久久久99久久精品女同性| 久久亚洲精品中文字幕冲田杏梨| 精品视频在线播放免| 一级做a爰片久久毛片美女图片| 日韩欧美中文免费| 久久人91精品久久久久久不卡| 国产精品久久激情| 欧美精品福利视频| 久久手机免费视频| 欧美激情网站在线观看| 欧美黑人xxx| 大桥未久av一区二区三区| 夜色77av精品影院| 7777免费精品视频| 国产在线视频不卡| 美乳少妇欧美精品| 日韩成人av在线播放| 日韩精品免费在线| 精品国产美女在线| 97精品国产aⅴ7777| 成人免费在线视频网址| 亚洲国产精品久久精品怡红院| 伊人久久久久久久久久久久久|