【问题标题】:How do I store documents with multikey Id using GridStore?如何使用 GridStore 存储具有多键 ID 的文档?
【发布时间】:2014-06-15 07:50:19
【问题描述】:

我正在使用 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 的文档?

【问题讨论】:

    标签: node.js mongodb gridfs


    【解决方案1】:

    您应该为 GridStore 构造函数提供一个文件名,它会起作用:

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

    我翻遍了GitHub上的GridStoresource 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 值来验证这一点。

    【讨论】:

      猜你喜欢
      • 2018-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-22
      • 2011-03-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多