当我使用grid.put()将文件写入GridFS时,该文件与之前存储的文件具有相同的文件名,第一个文件将被覆盖。实际上,相同的文件名只能在数据库中存在一次,或者我做错了吗?
我的代码如下所示:
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指定为唯一,而不是由文件名指定。我错了吗?
感谢您的帮助!
答案 0 :(得分:2)
根据GridFS spec文件由_id索引。文件名是元数据的一部分,不必是唯一的。如果您将具有相同文件名的内容放两次,则应该能够通过命令行中的 mongofiles list 确认这两个文件是否存在。
您使用的是哪个版本的MongoDB Node.js驱动程序?看起来几个月前有一个驱动程序错误已得到纠正:Cannot save files with the same file name to GridFS。
答案 1 :(得分:-2)
是的,他们被覆盖了,就像真正的文件系统一样! _id
对于MongoDB内部(以及标准文档)至关重要,但是当您使用GridFS文件时,_id
字段无关紧要,文件名必须是唯一的。
:当您grid.get
时,您希望收到什么?第一个文件?第二?两者结合了吗?