一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數據庫技術|

服務器之家 - 數據庫 - MongoDB - MongoDB執行mongoexport時的異常及分析(數字類型的查詢)

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

2020-05-19 15:00東山絮柳仔 MongoDB

這篇文章主要給大家介紹了關于MongoDB執行mongoexport時的異常及分析(數字類型的查詢)的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面隨著小編來一起學習學習吧

概述

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命令,執行命令如下:

?
1
/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 ,再次執行。

執行命令為 :

?
1
/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)

執行命令為 :

?
1
/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時的異常及分析(數字類型的查詢)

執行也成功。

結論

說了很多總結下:

執行失敗的導出命令是:

?
1
/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

執行成功的導出命令是:

?
1
/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

?
1
/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 需要顯示指定才可以。+

總結

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

原文鏈接:http://www.cnblogs.com/xuliuzai/p/9601266.html

 

延伸 · 閱讀

精彩推薦
  • MongoDB遷移sqlserver數據到MongoDb的方法

    遷移sqlserver數據到MongoDb的方法

    這篇文章主要介紹了遷移sqlserver數據到MongoDb的方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下...

    聽楓xl9682021-01-03
  • MongoDBMongoDB 內存使用情況分析

    MongoDB 內存使用情況分析

    都說 MongoDB 是個內存大戶,但是怎么知道它到底用了多少內存呢...

    MongoDB教程網10002020-09-29
  • MongoDBMongoDB憑什么躋身數據庫排行前五

    MongoDB憑什么躋身數據庫排行前五

    MongoDB以比去年同期超出65.96分的成績繼續雄踞榜單前五,這個增幅在全榜僅次于PostgreSQL的77.99,而其相對于4月份的6.10分的增長也是僅次于微軟SQL Server排名...

    孫浩峰3892020-05-22
  • MongoDBMongoDB安裝圖文教程

    MongoDB安裝圖文教程

    這篇文章主要為大家詳細介紹了MongoDB安裝圖文教程,分為兩大部分為大家介紹下載MongoDB和安裝MongoDB的方法,感興趣的小伙伴們可以參考一下 ...

    Yangyi.He6132020-05-07
  • MongoDBMongodb實現定時備份與恢復的方法教程

    Mongodb實現定時備份與恢復的方法教程

    這篇文章主要給大家介紹了Mongodb實現定時備份與恢復的方法教程,文中通過示例代碼介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面...

    chenjsh364522020-05-13
  • MongoDB分布式文檔存儲數據庫之MongoDB分片集群的問題

    分布式文檔存儲數據庫之MongoDB分片集群的問題

    這篇文章主要介紹了分布式文檔存儲數據庫之MongoDB分片集群的問題,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋...

    Linux-18743072020-12-20
  • MongoDBmongodb基本命令實例小結

    mongodb基本命令實例小結

    這篇文章主要介紹了mongodb基本命令,結合實例形式總結分析了MongoDB數據庫切換、查看、刪除、查詢等基本命令用法與操作注意事項,需要的朋友可以參考下...

    dawn-liu3652020-05-26
  • MongoDBMongoDB中javascript腳本編程簡介和入門實例

    MongoDB中javascript腳本編程簡介和入門實例

    作為一個數據庫,MongoDB有一個很大的優勢——它使用js管理數據庫,所以也能夠使用js腳本進行復雜的管理——這種方法非常靈活 ...

    MongoDB教程網6982020-04-24
主站蜘蛛池模板: 日韩精品一区二区三区毛片 | 日韩精品免费一区二区 | naruto hentai玖辛奈 | 国产久热香蕉在线观看 | 免费观看在线永久免费xx视频 | 四缺一写的小说 | 动漫美女人物被黄漫小说 | 香蕉久久久久 | 日本中年japanesebear | 国产一级片在线 | 荡女人人爱全文免费阅读 | 十八女下面流水不遮免费 | 亚洲第一色区 | 亚洲九九九 | 天莱男模gary | 变态女王麻麻小说在线阅读 | 高清毛片aaaaaaaaa片 | 草莓香蕉绿巨人丝瓜榴莲污在线观看 | 夫妻性生活免费在线观看 | 国产成人影院一区二区 | 国产精品第 | 91国内精品久久久久影院优播 | 五月色婷婷久久综合 | 99久久免费国内精品 | 国产做a爰片久久毛片 | 成人私人影院www片免费高清 | 免费超级乱淫视频播放性 | 日本免费一二区 | 国产精品久久久久久久免费大片 | 成人小视频在线观看 | 欧美亚洲视频在线观看 | 99在线视频精品费观看视 | 2018亚洲男人天堂 | 女女宿舍互慰h文小说 | 99久久久久国产 | 色综合中文字幕在线亚洲 | 成人小视频在线观看 | 国产在线精品观看 | 视频一区二区 村上凉子 | 国产区1| 亚洲欧美在线免费 |