起因:之前用即时应用做了一个小程序,产生了上千条的应用数据(以csv文件导出),现在即时应用即将要收费,于是把小程序用云开发重写了后台数据库,所以就有了这次的数据迁移,即将上千条的csv文件数据导入到小程序的云开发数据库(以下简称云数据库)。
一、云数据导入导读
云开发支持从文件导入已有的数据。目前仅支持导入 CSV、JSON 格式的文件数据。有云开发控制台和HTTP API两种导入方式。在此只介绍下使用云开发控制台导入数据。
使用云开发控制台导入
要导入数据,需打开云开发控制台,切换到 “数据库” 标签页,并选择要导入数据的集合,点击 “导入” 按钮。
选择要导入的 CSV 或者 JSON 文件,以及冲突处理模式,点击 “导入” 按钮即可开始导入。
文件格式
JSON、CSV 文件必须是 UTF-8 的编码格式,且其内容类似 MongoDB 的导出格式,例如:
JSON:
{
"_id": "xxxxxx",
"age": 45
}
{
"_id": "yyyyyy",
"age": 21
}
CSV:
_id,age
xxxxxx,45
yyyyyy,21
需要注意以下几点:
1、JSON 数据不是数组,而是类似 JSON Lines,即各个记录对象之间使用 \n
分隔,而非逗号;
2、JSON 数据每个键值对的键名首尾不能是 .
,例如 ".a"
、"abc."
,且不能包含多个连续的 .
,例如 "a..b"
;
3、键名不能重复,且不能有歧义,例如 {"a": 1, "a": 2}
或 {"a": {"b": 1}, "a.b": 2}
;
4、时间格式须为 ISODate 格式,例如 "date": { "$date" : "2018-08-31T17:30:00.882Z" }
;
5、当使用 Insert 冲突处理模式时,同一文件不能存在重复的 _id
字段,或与数据库已有记录相同的 _id
字段;
6、CSV 格式的数据默认以第一行作为导入后的所有键名,余下的每一行则是与首行键名一一对应的键值记录。
目前提供了 Insert、Upsert 两种冲突处理模式。Insert 模式会在导入时总是插入新记录,Upsert 则会判断有无该条记录,如果有则更新记录,否则就插入一条新记录。
导入完成后,可以在提示信息中看到本次导入记录的情况。
二、准备工作
- 直接将csv数据导入到云数据库,文件导入报错,导入内容乱码。因此需要将csv文件转成json格式。
- 在线csv转json工具json-csv.com 或者col2json
3.对转换结果进行校验 Json在线校验工具
三、对校验结果进行修正,
参考 JSON Lines的示例,检查各个json数组是否正确
{
"name": "Gilbert",
"wins": [
[
"straight",
"7♣"
],
[
"one pair",
"10♥"
]
]
}
{
"name": "Alexa",
"wins": [
[
"two pair",
"4♠"
],
[
"two pair",
"9♠"
]
]
}
四、导入时遇到的问题列表
导入数据库失败, Error: Poll error,
导入数据任务(id:339958)异常,错误信息:解析json文档错误,请检查导入文件格式,
错误详情如下:invalid character '-' after object key:value pair
导入数据库失败, Error: Poll error,
导入数据任务(id:340089)异常,错误信息:解析json文档错误,请检查导入文件格式,
错误详情如下:invalid character '\r' in string literal
导入数据库失败, Error: Poll error,
导入数据任务(id:340090)异常,错误信息:解析json文档错误,请检查导入文件格式,
错误详情如下:invalid character '\t' in string literal
导入数据库失败, Error: Poll error,
导入数据任务(id:340108)异常,错误信息:解析json文档错误,请检查导入文件格式,
错误详情如下:invalid character 'è' looking for beginning of value
导入数据库失败, Error: Poll error,
导入数据任务(id:340118)异常,错误信息:解析json文档错误,请检查导入文件格式,
错误详情如下:invalid character 'ç' looking for beginning of value
导入数据库失败, Error: Poll error,
导入数据任务(id:340125)异常,
错误信息:解析json文档错误,请检查导入文件格式,
错误详情如下:invalid character '6' after object key:value pair
导入数据库失败, Error: Poll error,
导入数据任务(id:340133)异常,错误信息:解析json文档错误,请检查导入文件格式,
错误详情如下:invalid character ',' looking for beginning of value
导入数据库失败, Error: Poll error,
导入数据任务(id:340140)异常,错误信息:解析json文档错误,请检查导入文件格式,
错误详情如下:invalid character 'å' after object key:value pair
导入数据库失败, Error: Poll error,
导入数据任务(id:340169)异常,错误信息:解析json文档错误,请检查导入文件格式,
错误详情如下:invalid character 'c' in literal ObjectId (expecting 'b')
五、导入错误查看步骤
看到这个错误时,刷新下数据库记录,查看下最后一条导入数据的id。
然后导入文件中查找id对应记录之后的那条记录即可。如下结构中就存在telphone存在‘-’非法字符。
"age": 22,
"telphone": 185-3000-9790,
六、总结
小程序云开发提供了免费的数据库使用,但数据库操作上存在很多不好用的地方,比如没有批量删除即可与其记录的功能,比如导入的容错性太低,比如导入报错时,错误提示不明确,如作者遇到的导入数据任务(id:340125)异常,这个id是什么鬼?
因此需要大家仔细校验数据。