0

以前に保存されたファイルと同じファイル名を持つgrid.put()を使用してGridFSにファイルを書き込んでいると、最初のファイルが上書きされます。同じファイル名がデータベースに1回しか存在できないというのは本当ですか、それとも何か間違ったことをしていますか?

私のコードは次のようになります:

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) {
    });
  });
});

ファイルはファイル名ではなく._idObjectIdによって一意に指定されていると思いました。私が間違っている?

ご協力いただきありがとうございます!

4

2 に答える 2

3

GridFS仕様に従って、ファイルは _id によってインデックス化されます。ファイル名はメタデータの一部であり、一意である必要はありません。同じファイル名のものを 2 回入れた場合、コマンド ラインからmongofiles listを使用して、両方のファイルが存在することを確認できるはずです。

使用している MongoDB Node.js ドライバーのバージョンは何ですか? 数か月前にドライバーのバグが修正されたようです: Cannot save files with the same file name to GridFS .

于 2012-06-22T01:36:18.833 に答える
-2

はい、実際のファイルシステムのように上書きされました!これ_idはMongoDB内部(および標準ドキュメント)に不可欠ですが、GridFSファイルを操作する場合、_idフィールドは重要ではなく、ファイル名は一意である必要があります。

また:あなたがするときあなたは何を受け取ると思いますgrid.getか?最初のファイル?二番目?両方を組み合わせましたか?

于 2012-06-19T21:54:47.663 に答える