Express 使用身份验证删除mongoose中文档的有效方法

Express 使用身份验证删除mongoose中文档的有效方法,express,mongoose,Express,Mongoose,我正在用express和mongoose构建RESTAPI。这是我从集合中删除文档的方式: 。。。 如果(!req.session.user)返回res.status(401).send() const e=wait Event.findOne({u id:req.params.eventId}).exec(); if(e.owner!==req.session.user)返回res.status(403.send(); wait Event.findOneAndDelete({u id:req

我正在用express和mongoose构建RESTAPI。这是我从集合中删除文档的方式:

。。。
如果(!req.session.user)返回res.status(401).send()
const e=wait Event.findOne({u id:req.params.eventId}).exec();
if(e.owner!==req.session.user)返回res.status(403.send();
wait Event.findOneAndDelete({u id:req.params.eventId}).exec();
返回res.status(204).send()
...
我看到的问题是,为了一个文档,我在数据库中查询了两次,但在我看来,这样做既不正确,也不高效


只有一个查询,正确的方法是什么?

您只需在删除查询中传递owner字段,将owner设置为req.session.user,如果将有一个文档具有特定事件id,并且owner设置为会话用户,则将删除该文档

if (!req.session.user) return res.status(401).send()
await Event.findOneAndDelete({_id: req.params.eventId, owner: req.session.user}).exec();
return res.status(204).send()
而且,由于mongodb在文档级别没有对RBAC的内部支持,因此在许多用例中,您必须进行多次查询,以确定请求是否被授权执行某些操作。
您可以查看更好的RBAC管理,它还支持内置mongodb。

您只需在删除查询中传递owner字段,将owner设置为req.session.user,并且如果将有一个文档具有特定的事件id,并且owner设置为会话用户,它将被删除

if (!req.session.user) return res.status(401).send()
await Event.findOneAndDelete({_id: req.params.eventId, owner: req.session.user}).exec();
return res.status(204).send()
而且,由于mongodb在文档级别没有对RBAC的内部支持,因此在许多用例中,您必须进行多次查询,以确定请求是否被授权执行某些操作。 您可以查看更好的RBAC管理,它还内置了对mongodb的支持