0

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

谢谢你的帮助!

4

2 回答 2

3

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

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

于 2012-06-22T01:36:18.833 回答
-2

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

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

于 2012-06-19T21:54:47.663 回答