2012-06-19 76 views
0

當我使用grid.put()將文件寫入GridFS時,它具有與之前存儲的文件相同的文件名,第一個文件將被覆蓋。實際上,相同的文件名只能在數據庫中存在一次,或者我做錯了什麼?nodejs gridfs grid.put()具有相同的文件名覆蓋文件

我的代碼如下所示:

var mongo = require('mongodb'), 
    Server = mongo.Server, 
    Db = mongo.Db, 
    Grid = mongo.Grid; 
    server = new Server('localhost', 27017, {auto_reconnect: true}); 
    db = new Db('mydb', server); 

db.open(function(err, db) { 
    var buffer = new Buffer("This is the first sample text"); 
    grid.put(buffer, {metadata:{}, filename: "test.txt", content_type: 'text'}, function(err, fileInfo) { 
    buffer = new Buffer("This is the second sample text"); 
    // now this overwrites the first one... 
    grid.put(buffer, {metadata:{}, filename: "test.txt", content_type: 'text'}, function(err, fileInfo) { 
    }); 
    }); 
}); 

我認爲該文件是由._id的ObjectId,而不是由文件名指定的唯一。我錯了嗎?

感謝您的幫助!

回答

2

根據GridFS spec,這些文件被索引爲_id。文件名是元數據的一部分,並不一定是唯一的。如果您將兩次具有相同文件名的文件放在一起,您應該能夠通過從命令行使用mongofiles列表來確認這兩個文件是否存在。

您使用的是什麼版本的MongoDB Node.js驅動程序?看起來幾個月前有一個驅動程序bug被糾正了:Cannot save files with the same file name to GridFS

+0

謝謝!這是一個有用的答案。 – heinob

-2

是的,它們被覆蓋,就像真正的文件系統一樣! _id對於MongoDB內部(和標準文檔)是必不可少的,但是當您使用GridFS文件_id字段無關緊要時,文件名必須是唯一的。

另外:當你做grid.get時,你會期望收到什麼?第一個文件?第二?兩者結合?

+1

你的問題假定grid.get()的參數是。但事實並非如此!由於[文檔](http://mongodb.github.com/node-mongodb-native/api-generated/grid.html#get),它是。所以我希望能得到與這個_id完全相同的文檔,儘管其他文檔具有相同的名稱。 – heinob

相關問題