测试环境中,需要导入一些数据,而这些数据来自甲方已有的测试环境。
对方使用db.xxx.find().toArray()进行了数据导出,但是到了本地导入就没有那么简单了。
数据是这样的
[
{
"_id" : ObjectId("xxx"),
"createdAt" : NumberLong(1668159683),
"deviceId" : "xxx",
"actionType" : "2",
"actionValue" : "1",
"actionInfo" : "xxx"
},
...
以上数据不是标准的json数据。json数据要求所有的字段都得是字符,而不能出现ObjectId和NumberLong这种字样。
那么我们使用几个命令进行替换一下
sed -i 's!ObjectId(!{"$oid":!g' xxx.json
sed -i 's! ),! },!g' xxx.json
sed -i 's!NumberLong(!{"$numberLong": "!g' xxx.json
sed -i 's!),!"},!g' xxx.json
形成的数据如下:
[
{
"_id": {
"$oid": "xx"
},
"createdAt": {"$numberLong": "1668159683"},
"deviceId": "xx",
"actionType": "2",
"actionValue": "1",
"actionInfo": "xxxx"
},
...
这样,我们就可以使用mongoimport进行导入了
mongoimport --db xx --collection xx --file xx.json --jsonArray --username xx --password xx
如果用navicat进行导入的话会遇到另一个问题,就是他会把oid这种字样也导入进去。
最后呢,写了一个脚本,用于下载再次遇到这种情况的时候直接在线使用。