mongo shell直接insert json時的bug——int也變double

1. 由于線上服務(wù)使用了阿里云的mongodb(VPC網(wǎng)絡(luò)),本地測試沒有公網(wǎng)訪問權(quán)限。

為了定位報表問題,不得不同步數(shù)據(jù)庫。

2. 有點(diǎn)懶得寫 mongodump 了, 于是 手動使用mongo shell insert幾條記錄到測試數(shù)據(jù)庫:

{ "_id" : ObjectId("59a4d2e30c2e52411f7e6666"), "CodeHash" : "d548891edab9c96c42b8a88f110a6cfc", "Time" : NumberLong(1503972000), "Date" : "2017-08-29 10:00:00", "ProductId" : 28, "ProjectId" : 4, "GroupId" : 3, "CreativeId" : 4, "LinkId" : 24, "AdPosId" : "598837a41ad88e01000428c8", "Request" : 11, "ImpNormal" : 0, "ImpInvalid" : 0, "ImpDuplicate" : 0, "ClNormal" : 0, "ClkInvalid" : 0, "ClkDuplicate" : 0, "Cost" : 0 }

3. 更新完后,測試報表就開始報錯 : double 無法cast 成 integer 。

4. 百思不得其解 ! 由于后端代碼也更新過,一直覺得代碼有問題了?

5. 折騰了好久,最終發(fā)現(xiàn) mongo shell下 insert json, 會被默認(rèn)轉(zhuǎn)成 double 類型。

https://zhidao.baidu.com/question/1961969396649749180.html

在官網(wǎng)https://docs.mongodb.org/v3.0/core/shell-types/

中提到,mongo shell是有類型的。但我們在輸入時,一般是這樣輸入的:

db.item.insert( {_id:2002,amount:78} )

沒有指定任何類型,并且,使用的是json格式。問題就來了:json格式只有number類型,并沒有細(xì)分int、double之類的數(shù)字,

那么為了保險起見,顯然mongo

shell全部把它存為了double類型。官方顯然早就注意到了這個問題,允許在shell中輸入數(shù)據(jù)時指定類型,比如:

db.item.insert( {_id:NumberInt(2009),amount:78,name:"kfsjadlfasfkljeihfdsfkasfjslkfjei"} )

使用NumberInt之類的函數(shù)來指定類型。

6. 趕緊 db.adnstats.drop() 刪除集合中所有數(shù)據(jù)。

7. 然后老老實實地導(dǎo)出導(dǎo)入數(shù)據(jù)吧:

mongodump -h 172.17.0.xx --port 10017 --authenticationDatabase admin -u root -p xx -d AdnStats -o /home/mongodump/adnstats

mongorestore -h 101.200.xx.xx --port 10017 --authenticationDatabase admin -u root -p xx -d AdnStats /home/mongodump/adnstats/AdnStats

8. 再次運(yùn)行測試環(huán)境的報表,看到結(jié)果了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 簡介 MongoDB 是一個基于分布式文件存儲的NoSQL數(shù)據(jù)庫 由C++語言編寫,運(yùn)行穩(wěn)定,性能高 旨在為 WE...
    大熊_7d48閱讀 37,862評論 1 9
  • 安裝 mongodb服務(wù): sudo service mongod/mongodb start sudo serv...
    末版車閱讀 647評論 0 0
  • 1. MongoDB 簡介 MongoDB是一個可擴(kuò)展的高性能,開源,模式自由,面向文檔的NoSQL,基于分布式文...
    rhlp閱讀 1,209評論 0 3
  • 數(shù)據(jù)庫相關(guān) 數(shù)據(jù)庫安裝和配置 安裝之后需要配置環(huán)境變量;驗證:mongo命令是否有效啟動服務(wù)端: C:User\A...
    強(qiáng)某某閱讀 199評論 0 0
  • Built-In Roles(內(nèi)置角色): 1. 數(shù)據(jù)庫用戶角色:read、readWrite; 2. 數(shù)據(jù)庫管理...
    阿杰Alex閱讀 1,572評論 0 1

友情鏈接更多精彩內(nèi)容