测试环境中,需要导入一些数据,而这些数据来自甲方已有的测试环境。

对方使用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这种字样也导入进去。

最后呢,写了一个脚本,用于下载再次遇到这种情况的时候直接在线使用。

最后修改:2024 年 05 月 11 日
如果觉得我的文章对你有用,请随意赞赏