从 mongo 导出然后导入 SQL Server 时出现问题

Posted

技术标签:

【中文标题】从 mongo 导出然后导入 SQL Server 时出现问题【英文标题】:Problem exporting from mongo and then importing to SQL Server 【发布时间】:2019-04-30 17:52:38 【问题描述】:

问题:如果我使用 $unwind,如何从 mongo 导出以便可以导入 SQL Server?

我需要使用 $unwind,这意味着我不能使用 mongoexport.exe。 Mongo.exe 为 json 提供不同的输出,如下所示。输出我无法加载到 SQL Server。我会导出为 csv 输出,但我的数据包含逗号。我会使用 $out 首先将我的数据复制到一个新集合中,然后使用 mongoexport,但我正在查询云中的生产服务器,我只有读取权限。

为了说明我的问题,我创建了一个集合,其中包含一个日期字段“edited_on”的记录。您可以在这里看到 mongoexport 输出以 ["_id:$oid.... 开头,而 mongo 输出以 "_id : ObjectID(....

*** 蒙古出口

命令:

mongoexport --quiet --host localhost:27017 --db "zzz" -c "Test_Structures" --fields 已编辑的_on --type json --jsonArray --out C:\export_test.json

输出:

["_id":"$oid":"5aaa1d85b8078250f1000c0e","edited_on":"$date":"2018-03-15T07:15:17.583Z"]

我可以使用 OPENROWSET 和 OPENJSON 将此数据导入 SQL。 此处描述:https://www.mssqltips.com/sqlservertip/5295/different-ways-to-import-json-files-into-sql-server/

*** 蒙哥

命令:

mongo localhost/UW --quiet -eval "db.Test_Structures.aggregate( $project: _id: 1 ,edited_on: 1 )" > C:\aggregate_test.json

输出:

"_id" : ObjectId("5aaa1d85b8078250f1000c0e"), "edited_on" : ISODate("2018-03-15T07:15:17.583Z")

【问题讨论】:

【参考方案1】:

声明@JSON varchar(max)

我的同事回答了我的问题。使用 replace() 删除 json 文件中导致如下问题的文本。

选择 @JSON = BulkColumn 从 OPENROWSET (BULK 'C:\aggregate_test.json', SINGLE_CLOB) 作为 j SET @JSON = replace(replace(replace(@JSON,'objectid(',''),'isodate(',''),'")','"')

SELECT * FROM OPENJSON (@JSON) With (...)

【讨论】:

以上是关于从 mongo 导出然后导入 SQL Server 时出现问题的主要内容,如果未能解决你的问题,请参考以下文章

如何从 SQL SERVER 导出/导入数据库

从SQL Server数据库导出SQL语句

如何远程把sql server中的数据导入到本地sql server中?

如何把DB2的数据直接导入SQL server中

sql server使用bcp导出txt文件然后导入到mysql

使用导入导出向导将数据从 Excel 导入 Sql Server 时,如何更改列的默认 varchar 255?