Search code examples
vb.netmongodb-.net-drivergridfs

MongoDB C# How to Update GridFS File and metadata?


Need a solution to to see if the grid file exist and then update the file with metadata.

I am using the solution below. but want a better one.

Don't mind having separate Update and Delete methods.

Thanks

Public Class storedXYZ 

    Property Data As Stream

    Property MetaData As storedXYZMetaData

End Class

Public Sub SaveStoredXYZ(storedXYZ As StoredXYZ) 


        Dim MongoGridFSCreateOptions As New MongoDB.Driver.GridFS.MongoGridFSCreateOptions

        Dim qry As IMongoQuery


        qry = Query.EQ("metadata.StoredXYZId", BsonValue.Create(storedXYZ.MetaData.StoredXYZ.ToString()))


        Dim gridFile As MongoGridFSFileInfo = mdbGridFS.FindOne(qry)


        If gridFile IsNot Nothing Then

            Dim mongoStream As MongoGridFSStream

            MongoGridFSCreateOptions.Metadata = storedXYZ.MetaData.ToBsonDocument

            mongoStream = gridFile.OpenWrite()

            ''Convert MongoStream to MemoryStream
            Dim fs As Stream = New MemoryStream()
            Dim buffer As Byte() = New Byte(9999) {}
            Dim bytesRead As Integer = 0
            Do
                bytesRead = storedXYZ.Data.Read(buffer, 0, buffer.Length)
                mongoStream.Write(buffer, 0, bytesRead)
            Loop While bytesRead > 0

            mongoStream.Seek(0, SeekOrigin.Begin)
            mongoStream.Position = 0


            mdbGridFS.SetMetadata(gridFile, storedAXYZ.MetaData.ToBsonDocument)

        Else

            MongoGridFSCreateOptions.Metadata = storedXYZ.MetaData.ToBsonDocument

            Dim fileinfo As MongoGridFSFileInfo

            fileinfo = mdbGridFS.Upload(storedXYZ.Data, storedXYZ.MetaData.Name, MongoGridFSCreateOptions)

        End If

End Sub

Solution

  • Rather than trying to overwrite the current file why not just fire off a delete command and then re-upload the file and update the document to the old ones Id?