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



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

感谢您的帮助!

根据 GridFS 规范,文件按 _id 编制索引。 文件名是元数据的一部分,不必是唯一的。 如果您两次放置具有相同文件名的内容,您应该能够通过从命令行使用 mongofiles list 确认这两个文件存在。

您使用的是哪个版本的MongoDB Node.js驱动程序? 看起来几个月前纠正了一个驱动程序错误:无法将具有相同文件名的文件保存到 GridFS。

是的,它们被覆盖了,就像在真正的文件系统上一样!_id对于MongoDB内部(以及标准文档)至关重要,但是当您使用GridFS文件时,_id字段无关紧要,文件名必须是唯一的。

另外:当你做grid.get时,你期望得到什么?第一个文件?第二个?两者结合?

最新更新