起因:之前用即時(shí)應(yīng)用做了一個(gè)小程序,產(chǎn)生了上千條的應(yīng)用數(shù)據(jù)(以csv文件導(dǎo)出),現(xiàn)在即時(shí)應(yīng)用即將要收費(fèi),于是把小程序用云開發(fā)重寫了后臺(tái)數(shù)據(jù)庫(kù)克滴,所以就有了這次的數(shù)據(jù)遷移,即將上千條的csv文件數(shù)據(jù)導(dǎo)入到小程序的云開發(fā)數(shù)據(jù)庫(kù)(以下簡(jiǎn)稱云數(shù)據(jù)庫(kù))优床。
一劝赔、云數(shù)據(jù)導(dǎo)入導(dǎo)讀
云開發(fā)支持從文件導(dǎo)入已有的數(shù)據(jù)。目前僅支持導(dǎo)入 CSV胆敞、JSON 格式的文件數(shù)據(jù)着帽。有云開發(fā)控制臺(tái)和HTTP API兩種導(dǎo)入方式。在此只介紹下使用云開發(fā)控制臺(tái)導(dǎo)入數(shù)據(jù)移层。
使用云開發(fā)控制臺(tái)導(dǎo)入
要導(dǎo)入數(shù)據(jù)仍翰,需打開云開發(fā)控制臺(tái),切換到 “數(shù)據(jù)庫(kù)” 標(biāo)簽頁(yè)观话,并選擇要導(dǎo)入數(shù)據(jù)的集合予借,點(diǎn)擊 “導(dǎo)入” 按鈕。
選擇要導(dǎo)入的 CSV 或者 JSON 文件频蛔,以及沖突處理模式灵迫,點(diǎn)擊 “導(dǎo)入” 按鈕即可開始導(dǎo)入。
文件格式
JSON晦溪、CSV 文件必須是 UTF-8 的編碼格式瀑粥,且其內(nèi)容類似 MongoDB 的導(dǎo)出格式,例如:
JSON:
{
"_id": "xxxxxx",
"age": 45
}
{
"_id": "yyyyyy",
"age": 21
}
CSV:
_id,age
xxxxxx,45
yyyyyy,21
需要注意以下幾點(diǎn):
1三圆、JSON 數(shù)據(jù)不是數(shù)組狞换,而是類似 JSON Lines,即各個(gè)記錄對(duì)象之間使用 \n
分隔舟肉,而非逗號(hào)修噪;
2、JSON 數(shù)據(jù)每個(gè)鍵值對(duì)的鍵名首尾不能是 .
路媚,例如 ".a"
割按、"abc."
,且不能包含多個(gè)連續(xù)的 .
磷籍,例如 "a..b"
适荣;
3、鍵名不能重復(fù)院领,且不能有歧義弛矛,例如 {"a": 1, "a": 2}
或 {"a": {"b": 1}, "a.b": 2}
;
4比然、時(shí)間格式須為 ISODate 格式丈氓,例如 "date": { "$date" : "2018-08-31T17:30:00.882Z" }
;
5强法、當(dāng)使用 Insert 沖突處理模式時(shí)万俗,同一文件不能存在重復(fù)的 _id
字段,或與數(shù)據(jù)庫(kù)已有記錄相同的 _id
字段饮怯;
6闰歪、CSV 格式的數(shù)據(jù)默認(rèn)以第一行作為導(dǎo)入后的所有鍵名,余下的每一行則是與首行鍵名一一對(duì)應(yīng)的鍵值記錄蓖墅。
目前提供了 Insert库倘、Upsert 兩種沖突處理模式。Insert 模式會(huì)在導(dǎo)入時(shí)總是插入新記錄论矾,Upsert 則會(huì)判斷有無(wú)該條記錄教翩,如果有則更新記錄,否則就插入一條新記錄贪壳。
導(dǎo)入完成后饱亿,可以在提示信息中看到本次導(dǎo)入記錄的情況。
二闰靴、準(zhǔn)備工作
- 直接將csv數(shù)據(jù)導(dǎo)入到云數(shù)據(jù)庫(kù)彪笼,文件導(dǎo)入報(bào)錯(cuò),導(dǎo)入內(nèi)容亂碼传黄。因此需要將csv文件轉(zhuǎn)成json格式杰扫。
- 在線csv轉(zhuǎn)json工具json-csv.com 或者col2json
3.對(duì)轉(zhuǎn)換結(jié)果進(jìn)行校驗(yàn) Json在線校驗(yàn)工具
三、對(duì)校驗(yàn)結(jié)果進(jìn)行修正膘掰,
參考 JSON Lines的示例章姓,檢查各個(gè)json數(shù)組是否正確
{
"name": "Gilbert",
"wins": [
[
"straight",
"7?"
],
[
"one pair",
"10?"
]
]
}
{
"name": "Alexa",
"wins": [
[
"two pair",
"4?"
],
[
"two pair",
"9?"
]
]
}
四、導(dǎo)入時(shí)遇到的問(wèn)題列表
導(dǎo)入數(shù)據(jù)庫(kù)失敗, Error: Poll error,
導(dǎo)入數(shù)據(jù)任務(wù)(id:339958)異常识埋,錯(cuò)誤信息:解析json文檔錯(cuò)誤凡伊,請(qǐng)檢查導(dǎo)入文件格式,
錯(cuò)誤詳情如下:invalid character '-' after object key:value pair
導(dǎo)入數(shù)據(jù)庫(kù)失敗, Error: Poll error,
導(dǎo)入數(shù)據(jù)任務(wù)(id:340089)異常窒舟,錯(cuò)誤信息:解析json文檔錯(cuò)誤系忙,請(qǐng)檢查導(dǎo)入文件格式,
錯(cuò)誤詳情如下:invalid character '\r' in string literal
導(dǎo)入數(shù)據(jù)庫(kù)失敗, Error: Poll error,
導(dǎo)入數(shù)據(jù)任務(wù)(id:340090)異常惠豺,錯(cuò)誤信息:解析json文檔錯(cuò)誤银还,請(qǐng)檢查導(dǎo)入文件格式风宁,
錯(cuò)誤詳情如下:invalid character '\t' in string literal
導(dǎo)入數(shù)據(jù)庫(kù)失敗, Error: Poll error,
導(dǎo)入數(shù)據(jù)任務(wù)(id:340108)異常,錯(cuò)誤信息:解析json文檔錯(cuò)誤蛹疯,請(qǐng)檢查導(dǎo)入文件格式戒财,
錯(cuò)誤詳情如下:invalid character 'è' looking for beginning of value
導(dǎo)入數(shù)據(jù)庫(kù)失敗, Error: Poll error,
導(dǎo)入數(shù)據(jù)任務(wù)(id:340118)異常,錯(cuò)誤信息:解析json文檔錯(cuò)誤捺弦,請(qǐng)檢查導(dǎo)入文件格式饮寞,
錯(cuò)誤詳情如下:invalid character '?' looking for beginning of value
導(dǎo)入數(shù)據(jù)庫(kù)失敗, Error: Poll error,
導(dǎo)入數(shù)據(jù)任務(wù)(id:340125)異常,
錯(cuò)誤信息:解析json文檔錯(cuò)誤列吼,請(qǐng)檢查導(dǎo)入文件格式幽崩,
錯(cuò)誤詳情如下:invalid character '6' after object key:value pair
導(dǎo)入數(shù)據(jù)庫(kù)失敗, Error: Poll error,
導(dǎo)入數(shù)據(jù)任務(wù)(id:340133)異常,錯(cuò)誤信息:解析json文檔錯(cuò)誤寞钥,請(qǐng)檢查導(dǎo)入文件格式慌申,
錯(cuò)誤詳情如下:invalid character ',' looking for beginning of value
導(dǎo)入數(shù)據(jù)庫(kù)失敗, Error: Poll error,
導(dǎo)入數(shù)據(jù)任務(wù)(id:340140)異常,錯(cuò)誤信息:解析json文檔錯(cuò)誤凑耻,請(qǐng)檢查導(dǎo)入文件格式太示,
錯(cuò)誤詳情如下:invalid character '?' after object key:value pair
導(dǎo)入數(shù)據(jù)庫(kù)失敗, Error: Poll error,
導(dǎo)入數(shù)據(jù)任務(wù)(id:340169)異常,錯(cuò)誤信息:解析json文檔錯(cuò)誤香浩,請(qǐng)檢查導(dǎo)入文件格式类缤,
錯(cuò)誤詳情如下:invalid character 'c' in literal ObjectId (expecting 'b')
五、導(dǎo)入錯(cuò)誤查看步驟
看到這個(gè)錯(cuò)誤時(shí)邻吭,刷新下數(shù)據(jù)庫(kù)記錄餐弱,查看下最后一條導(dǎo)入數(shù)據(jù)的id。
然后導(dǎo)入文件中查找id對(duì)應(yīng)記錄之后的那條記錄即可囱晴。如下結(jié)構(gòu)中就存在telphone存在‘-’非法字符膏蚓。
"age": 22,
"telphone": 185-3000-9790,
六、總結(jié)
小程序云開發(fā)提供了免費(fèi)的數(shù)據(jù)庫(kù)使用畸写,但數(shù)據(jù)庫(kù)操作上存在很多不好用的地方驮瞧,比如沒(méi)有批量刪除即可與其記錄的功能,比如導(dǎo)入的容錯(cuò)性太低枯芬,比如導(dǎo)入報(bào)錯(cuò)時(shí)论笔,錯(cuò)誤提示不明確,如作者遇到的導(dǎo)入數(shù)據(jù)任務(wù)(id:340125)異常千所,這個(gè)id是什么鬼狂魔?
因此需要大家仔細(xì)校驗(yàn)數(shù)據(jù)。