我有以下代碼(刪除錯誤檢查以保持簡潔),它使用node-mongodb-native。NodeJS中的MongoDB GridFS驅動程序覆蓋同名文件
var mongo = require('mongodb').MongoClient;
var grid = require('mongodb').GridStore;
var url = 'mongodb://localhost:27017/mydatabase';
mongo.connect(url, function(err, db) {
var gs = new grid(db, 'myfile.txt', 'w', {
"metadata": {
// metadata here
}
});
gs.open(function(err, store) {
gs.writeFile('~/myfile.txt', function(err, doc) {
fs.unlink(req.files.save.path, function (err) {
// error checking etc
});
}
});
});
如果我運行它,一旦它工作正常,並將文件存儲在GridFS中。
現在,如果我在我的系統上刪除該文件,並創建一個具有相同名稱但內容不同的新文件,並再次通過該代碼運行它,則會上傳它。但是,它似乎覆蓋了已存儲在GridFS中的文件。 _id
保持不變,但md5
已更新爲新值。所以即使文件不同,因爲名稱是相同的,它會覆蓋GridFS中的當前文件。
有沒有辦法上傳兩個同名的文件?如果_id
是唯一的,那麼驅動程序爲什麼只根據文件名來覆蓋文件?
我在GitHub上發現了一個similar issue,但我使用npm
的驅動程序的最新版本,它按照上面的解釋進行操作。
我明白你的意思了。在更全面地查看文檔時,它看起來像文件名實際上是可選的。我只是將它放在元數據中查詢並忘記文件名字段本身。 [文件集合](http://docs.mongodb.org/manual/applications/gridfs/#the-files-collection) – BytesGuy