将二进制文件数据从SQL Server迁移到MongoDB GridFS

哈宝

这是我从SQL Server迁移到常规MongoDB集合后的Mongo文档。

{
"TicketId": 23,
"Attachments" : [ 
        {
            "_id" : 4221,
            "Name" : "profile Pic",
            "Size" : 218112,
            "Description" : "User Profile Pic",
            "Data" :{ "$binary" : "0M8R4KGxGuE.............",
            "IsPrivate" : false,
            "AttachmentType" = {
                                 "ContentType"   = "image/png",
                                 "FileExtension" = ".png"
                               },
            "CreatedByUserId" : 12,
            "CreatedDateTimeUtc" : ISODate("2012-05-21T18:40:08.570Z"),
        },
     { // Another attachment },
     { // Another attachment },
     { // Another attachment }]
}

但是我的附件大小超过16 MB,因为MongoDB文档大小限制为16 MB,所以我无法使用这种方法来保存附件。

看起来GridFS是在MongoDB中保存文件的正确方法,我在SO https://stackoverflow.com/a/4990536/942855上找到了此答案,它解释了如何将新文件保存到GridFS。但是我需要能够将数据从SQL Server迁移到MongoGridFS。

另外,当您将文件上传到GRIDFS时,似乎它会生成一些默认字段,我想知道如何向该文件中添加其他字段以映射到其他集合?

还是应该考虑将所有与信息相关的附件保留在其他映射集合中,并向其添加gridFsInfo.Id数组以进行映射?

我正在将MongoDB 3.2与MongoDB C#驱动程序一起使用

哈宝

这就是我最终做的方式

连接到MongoGridFs

  MongoCredential mongoCredential = MongoCredential.CreateCredential("dbName", "userName", "password");
            var mongoServerSettings = new MongoServerSettings {Server = new MongoServerAddress("host Ip",27017),
                Credentials = new List<MongoCredential> { mongoCredential },
                ConnectionMode = ConnectionMode.Automatic, ConnectTimeout = new TimeSpan(0,0,0,30)};
            var mongoServer = new MongoServer(mongoServerSettings);
            var mongoGridFsSettings = new MongoGridFSSettings { };
            var MongoGridFs = new MongoGridFS(mongoServer, DatabaseName, mongoGridFsSettings);

在我的C#SQL到Mongo导出中

ticket.Attachments = (from ta in context.TicketAttachments
                                          join a in context.Attachments on ta.AttachmentId equals a.Id
                                          join at in context.AttachmentTypes on a.TypeId equals at.Id
                                          where ta.TicketId == ticket.Id
                                          select new Domain.Model.Tickets.Attachment
                                          {
                                              Id = a.Id,
                                              // Load all fields
                                              Data = a.Data,
                                              Size = a.Size,
                                              Name = a.Name,
                                              AttachmentType = new Domain.Model.Tickets.AttachmentType()
                                              {
                                                  ContentType = at.ContentType,
                                                  FileExtension = at.FileExtension
                                              }
                                          }).ToList();

                    foreach (var attachment in ticket.Attachments)
                    {
                        Stream stream = new MemoryStream(attachment.Data);
                        MongoGridFSFileInfo mongoGridFsFileInfo = mongoDbContext.MongoGridFs.Upload(stream, attachment.Name);
                        attachment.GridFsObjectId = mongoGridFsFileInfo.Id.AsObjectId;
                    }

最后将我的ticket.Attachments对象保存在我的常规MongoCollection中

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Golang MongoDb GridFs测试

Golang-MongoDB(mgo)检索插入的文件(BSON不是GridFS)

查询二进制数据-MongoDB

是否可以将数据从MongoDB迁移到SQL-Server?

Node.js文件上传(Express 4,MongoDB,GridFS,GridFS-Stream)

使用GridFS和Meteor将图像存储在Mongodb中

SQL Server BCP将二进制文件导出到文件:文件开头的其他数据

实体框架将IP作为二进制文件保存到SQL Server

如何使用Spring Data MongoDB通过GridFS ObjectId获取二进制流

从MongoDB读取二进制文件

MongoDB GridFS错误

使用gridFS在mongoDB中存储文件(图像)

使用Internet Explorer打开JasperReports Server / Tomcat的文件内容资源(Excel)将内联显示二进制数据

将项目从VS2008迁移到2012会更改二进制内容

遍历并导入GridFS / MongoDB

将查询从Oracle迁移到SQL Server

从Oracle迁移到SQL Server

如何通过使用SQL Server Management Studio将Excel文件作为二进制类型导入数据库表中

无法使用MongoDb GridFs上传文件

将二进制数据从mongoDB移至rethinkDB

从SQL迁移到MongoDB?

从cfs:gridfs迁移到cfs:s3

在使用gridfs保存图像之前获取mongodb文件ID

将十六进制字符串转换为二进制SQL Server

将二进制数据对象迁移到核心数据实体

在 Swift 中读取二进制 (.hgt) 文件(将代码从 C++ 迁移到 swift)

更新mongodb gridfs文件,同时在c#中保留id

将 Oracle 视图迁移到 SQL Server

使用 Gridfs 或 BSON 将图像存储在 MongoDB