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));
});
我正在尝试从我的 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));
});