如何使用GridStore存储具有多键ID的文档?

我正在使用GridStore,并且我想要存储具有多个键的Id的文档。

我试过这个:

var gridStore = new GridStore(db, {uuid: uuid, format: fileName}, 'w'); // Open the file gridStore.open(function (err, gridStore) { // Write some data to the file gridStore.write(data, function (err, gridStore) { assert.equal(null, err); // Close (Flushes the data to MongoDB) gridStore.close(function (err, result) { assert.equal(null, err); // Verify that the file exists GridStore.exist(db, {uuid: uuid, format: fileName}, function (err, result) { assert.equal(null, err); assert.equal(true, result); }); }); }); }); 

但它失败,因为assert.equal(true, result); 声明。

如何使用GridStore存储具有多键ID的文档?

您应该提供一个文件名到GridStore的构造函数,它将工作:

 var gridStore = new GridStore(db, {uuid: uuid, format: fileName}, 'foobar', 'w'); 

我通过GitHub上的GridStore 源代码挖掘,发现这段代码(只显示相关部分):

 if(typeof mode === 'undefined') { mode = filename; filename = undefined; } if(id instanceof ObjectID) { this.referenceBy = REFERENCE_BY_ID; this.fileId = id; this.filename = filename; } else if(typeof filename == 'undefined') { this.referenceBy = REFERENCE_BY_FILENAME; this.filename = id; if (mode.indexOf('w') != null) { this.fileId = new ObjectID(); } } else { this.referenceBy = REFERENCE_BY_ID; this.fileId = id; this.filename = filename; } 

所以基本上,如果你不提供filename选项,GridStore将通过文件名来引用文档,并且将为_id字段创build一个新的ObjectId。 如果你提供文件名选项, _id将是你指定的。

您也可以通过检查fs.files集合并检查文件的_id值来validation这一点。