Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb 已编辑:Mongoose-如何仅允许所有者更新当前文档?_Mongodb_Mongoose - Fatal编程技术网

Mongodb 已编辑:Mongoose-如何仅允许所有者更新当前文档?

Mongodb 已编辑:Mongoose-如何仅允许所有者更新当前文档?,mongodb,mongoose,Mongodb,Mongoose,编辑: 摘要 对于要更新特定项目的用户,用户创建项目时已保存的用户id必须与其当前用户id匹配。当前用户保存在req.users中,以便在用户登录后可以访问 在我的Mongoose项目模式中,我有以下内容 const projectSchema = new mongoose.Schema( { name: String, description: String, userId: mongoose.Schema.ObjectId, } ... 如果在find()上查询,它将返回: {

编辑: 摘要

对于要更新特定项目的用户,用户创建项目时已保存的用户id必须与其当前用户id匹配。当前用户保存在req.users中,以便在用户登录后可以访问

在我的Mongoose项目模式中,我有以下内容

const projectSchema = new mongoose.Schema(

{

name: String,

description: String,

userId: mongoose.Schema.ObjectId,

}

...
如果在find()上查询,它将返回:

{
_id: 213213156,
name: "Project1",
description: "A brief description"
userId: 3131132, //this is the user that created this project
}
它是如何工作的?

每次创建项目时,我都会分配当前登录用户拥有的用户ID

我试过什么?

我尝试使用Model.find()进行查询,获取用户ID,然后生成一个if语句

我也试过做一些前置软件,但我认为我没有正确地使用它们

我想做什么?

我希望仅当项目的auth_id(存储在req.users中的当前用户id)与项目userId字段匹配时,才能够更新该项目——该字段已保存在该项目中

findOneById接受多个条件,所以您可以首先 搜索要修改的_id,在第二个条件中, userId必须与当前用户匹配

findOneById接受多个条件,所以您可以首先 搜索要修改的_id,在第二个条件中, userId必须与当前用户匹配


你能发布样本数据并用步骤解释吗。。。恐怕不只我一个人感到困惑。我会编辑这篇文章,让它更清晰。你需要类似这样的东西:
Model.updateOne({userId:req.users.\u id},{your\u project})
?我可以使用findbyidanddupdate和updateOne,但我的想法是只有作为userId的项目所有者才能更新它。。。这就是为什么我要首先验证模型的用户id是否与保存在登录令牌中的用户id匹配。@Valijon添加了更多信息,并更改了标题。您能否发布示例数据并用步骤进行解释。。。恐怕不只我一个人感到困惑。我会编辑这篇文章,让它更清晰。你需要类似这样的东西:
Model.updateOne({userId:req.users.\u id},{your\u project})
?我可以使用findbyidanddupdate和updateOne,但我的想法是只有作为userId的项目所有者才能更新它。。。这就是为什么我要首先验证模型的用户id是否与保存在登录令牌中的用户id匹配。@Valijon添加了更多信息,并更改了标题。
//I have set this router so that is protected, so users need to login.

Routing:

router
.route("/:projectId")
.get(projectsController.getProject)
.patch(authController.protect, projectsController.updateProject);
// I want to be able to access the userId without having to query find() -- because then I would have to perform 2 queries: find() and then findByIdAndUpdate
if(userId !== req.user.id) {
return new Error(msg)
}
Model.findOneAndUpdate({ 
    _id: req.params.projectId, 
    userId: req.user.id 
    }, ...