我正在使用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 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值来验证这一点。

关于node.js - 如何使用GridStore存储具有多键ID的文档?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24227610/

10-09 21:10