具有相同文件名的nodejs gridfs grid.put()将覆盖文件

时间:2012-06-19 16:43:53

标签: node.js mongodb gridfs

当我使用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指定为唯一,而不是由文件名指定。我错了吗?

感谢您的帮助!

2 个答案:

答案 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时,您希望收到什么?第一个文件?第二?两者结合了吗?