mongoose-gridfs icon indicating copy to clipboard operation
mongoose-gridfs copied to clipboard

FileSchema.methods.write() generates a new ObjectId even when provided with one

Open ncroese opened this issue 2 years ago • 0 comments

When FileSchema.methods.write() is called it makes a copy of the model instance to use certain properties from, including _id. However, the method to copy the model, copyInstance() from mongoose-common, will remove the _id property from the copy, causing in a new ObjectId to be generated for the file. This results in a mismatch between the model ObjectId and the ObjectId of the file in the database.

The reason for this is that in copyInstance() a method named mergeObjects() from the common library is used, which in turn uses the compact() method. This method uses isNotValue(), which returns true for mongodb.ObjectId objects, resulting in these type of objects from being filtered from the copied instance.

I think it would be best to fix this in the isNotValue() method of the common library, making sure it returns false for mongodb.ObjectId objects.

A workaround might be to make sure to send the ObjectId to the copyInstance() method as a String type instead, or add the ObjectId to the file instance later.

ncroese avatar Mar 07 '22 14:03 ncroese