MongoDB Gridfs-stream 只删除文件而不删除块

MongoDB Gridfs-stream is Only Deleting the File but Not the Chunk

我正在尝试从我的 MongoDB 数据库中删除文件和块,但我的路由只删除文件而不是块。我已经看到一些针对此问题的 Whosebug 解决方案,但它们现在已经过时或基于已弃用的 remove() 函数。我看到另一个解决方案,声称在删除查询选项中添加 root: bucketName 可以解决这个问题,但对我来说不是。

const router = require("express").Router();
var mongoose = require("mongoose");
var Schema = mongoose.Schema;
var ObjectId = require("mongodb").ObjectId;
const { authUser } = require("../middleware/auth");
const uploadMulter = require("../middleware/upload");
const Grid = require("gridfs-stream");

const connection = mongoose.connection;

let gfs, gridfsBucket;

connection.once("open", () => {
  gfs = Grid(connection.db, mongoose.mongo);
});

router.delete("/files/:_id", (req, res) => {

  gfs
    .collection("profilePictures")
    .deleteOne({ _id: ObjectId(req.params._id) }, (err) => {});//only deletes the profilePicture.file, but not profilePicture.chunk
});

我发现使用 delete() 会删除块和文件,但它必须是 gridfsBucket 上的 运行。 Whosebug 上的所有其他“解决方案”都使用已弃用的 remove()deleteOne() on gfs.

此解决方案的问题是 delete() 函数仅适用于 BSON _id's,因此如果您想根据文件名或元数据删除文件,则它不会起作用。

router.delete("/files/:_id", (req, res) => {
  gridfsBucket = new mongoose.mongo.GridFSBucket(connection.db, {
    bucketName: "profilePictures",
  });
  gridfsBucket.delete(ObjectId(req.params._id));
});