2016-08-18 3 views
0

Вот мой монгольский документ после переноса из SQL Server в обычную коллекцию MongoDB.Перенос данных двоичных файлов с SQL Server на MongoDB GridFS

{ 
"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 МБ размера, так как MongoDB размера документа ограничен до 16 МБ я не могу использовать этот подход, чтобы сохранить свои вложения.

Похоже, что GridFS - это правильный подход для сохранения файлов в MongoDB. Я нашел этот ответ на SO https://stackoverflow.com/a/4990536/942855, в котором объясняется, как сохранить новый файл в GridFS. Но мне нужно перенести данные с SQL Server на MongoGridFS.

Также, когда вы загружаете файл в GRIDFS, кажется, что он генерирует несколько полей по умолчанию, мне было интересно, как добавить дополнительные поля к нему в Map to other collections?

Или следует рассмотреть вопрос о сохранении всей связанной с информацией вложения с другой коллекцией сопоставлений и добавлении массива gridFsInfo.Id к ней для сопоставления?

Я использую MongoDB 3.2 с драйвером MongoDB C#

ответ

0

Это, как я в конечном итоге делает его

Подключение к 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-к-Монго экспорт

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

Смежные вопросы