我正在使用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的文档?
答案 0 :(得分:1)
您应该为GridStore构造函数提供一个文件名,它将起作用:
var gridStore = new GridStore(db, {uuid: uuid, format: fileName}, 'foobar', 'w');
我在GitHub上挖掘了GridStore source code并找到了这段代码(只显示了相关部分):
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
字段的新ObjectId。如果您提供文件名选项,则_id
将是您指定的名称。
您还可以通过检查fs.files
集合并检查文件的_id
值来验证这一点。