2016-08-18 1 views
0

SQL Server에서 일반 MongoDB 컬렉션으로 마이그레이션 한 후 다음은 내 Mongo 문서입니다.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 }] 
} 

하지만 난 내 첨부 파일을 저장하려면이 방법을 사용할 수 없습니다 MongoDB의 문서 크기 16 MB의 제한 때문에 16 메가 바이트 크기에 걸쳐있는 첨부 파일을 가지고있다. GridFS 내가 GridFS에 새로운 파일을 저장하는 방법을 설명 SO https://stackoverflow.com/a/4990536/942855에이 대답을 발견 MongoDB를 에 파일을 저장할 수있는 권리 접근 방식처럼

보인다. 하지만 SQL Server에서 MongoGridFS로 데이터를 마이그레이션 할 수 있어야합니다.

또한 GRIDFS에 파일을 업로드 할 때 몇 가지 기본 필드가 생성되는 것처럼 보입니다. 다른 필드를지도에 추가하려면 어떻게해야합니까?

다른 매핑 컬렉션과 관련된 모든 정보를 유지하고 매핑을 위해 gridFsInfo.Id의 배열을 추가해야한다고 생각합니까?

내가 MongoDB를 C#을 드라이버로 MongoDB를 3.2을 사용하고는

답변

0

이것은 내가 내 C# SQL - 투 - 몽고에서 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); 

에 그것을

연결을하고 결국 어떻게 수출

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에 저장하십시오.