如何使用GRIDFS从{mongoDB中的fs.chunks删除文档

时间:2017-05-01 08:16:05

标签: mongodb mongoose gridfs gridfs-stream

var GridFS = Grid(mongoose.connection.db, mongoose.mongo);
GridFS.remove({_id: mongoose.Types.ObjectId(req.params.file_id)}, function (err) {
    if (!err) {
        return res.send(204);
    } else {
        console.log("error");
    }
});

使用上面的代码我可以从fs.files集合中删除文档。但它并没有从fs.chunks系列中脱颖而出。如何删除fs.files和fs.chunks集合中的文档。

1 个答案:

答案 0 :(得分:0)

gridfs-stream 模块负责在原生GridStore unlink方法的帮助下删除文件和块。
 http://mongodb.github.io/node-mongodb-native/api-generated/gridstore.html#gridstore-unlink

如果您想清楚地了解模块,可以查看模块source code

我认为你的问题是你尝试传递一些额外的 Mongoose 架构类型(mongoose.Types.ObjectId)而你根本不需要它。

只需将文件_id(或文件名)传递给GridFS remove函数,如下所示:

GridFS.remove({ _id: req.params.file_id }, (err) => {
    if (err) console.log(err)
    res.sendStatus(204)
})

另外,请确保不要使用自定义文件架构中的 Mongoose remove方法犯同样的错误。 从逻辑上讲,它将删除文件而不是块,因为我意识到一段时间后。