openDownloadStream 基于 mongodb gridfs 中的元数据

openDownloadStream based on metadata in mongodb gridfs

我使用元数据创建了 GridFs 存储桶,页面字段如下。

    const bucket = new GridFSBucket(mydb, {
          "DocumentImageFile",
    });
    fs.createReadStream(file)
      .pipe(
            bucket.openUploadStream(documentId.toString(), {
              metadata: {
                page: 1,
              },
            }),
          )
          .on('finish', () => {
             fs.unlink(file, () => {});
          });

现在我需要根据页码阅读。但是阅读部分似乎没有过滤器。我们如何才能只读取只有 page: 1 的块作为我在存储期间获取的元数据。

const bucket = new GridFSBucket(projectContext.db, {
      bucketName: 'DocumentImageFile',
    });
    const strDocumentId: string = documentData.documentId.toString();
    const downloadStream = bucket.openDownloadStream(
      new ObjectID(strDocumentId),
    );

不确定这是否直接可行。目前我首先使用元数据查询文档 ID,然后使用该 ID 获取。所以使用两步过程我能够解决它。

const documentImage = await documentImageFileModel.findOne({
      filename: documentData.documentId,
      'metadata.page': 1,
    });

    const documentId = documentImage.id;

    const bucket = new GridFSBucket(projectContext.db, {
      bucketName: 'DocumentImageFile',
    });

    const downloadStream = bucket.openDownloadStream(new ObjectID(documentId));