gpt4 book ai didi

javascript - Put Request、JQuery、MongoDB 和 Mongoose 的更新问题

转载 作者:可可西里 更新时间:2023-11-01 09:15:12 24 4
gpt4 key购买 nike

我正在尝试使用 MongoDB、Mongoose、JQuery 和 Node.js 构建应用程序。每当我尝试添加到我的架构中的数组时,有时它会多次添加该项目。

架构

这是我的架构,我正在尝试添加我的赞成票和反对票数组,以跟踪通过 ID 投票的用户。

    var SuggestionSchema = new mongoose.Schema({      title: String,      content: String,      link: String,      upvote: [{        user_id: {        type: Schema.ObjectId,        ref: 'User'        }      }],      downvote: [{        user_id: {        type: Schema.ObjectId,        ref: 'User'        }      }],      user_id: {        type: Schema.ObjectId,        ref: 'User'      },      category_id: {        type: Schema.ObjectId,        ref: 'Category'      },    });

路由和查询

这是我的放置路径和查询

    router.put('/:suggestion_id/downvote', function(req, res, next) {      Suggestion.findByIdAndUpdate(      req.params.suggestion_id,      {$push: {"downvote": req.body}},      function(err, suggestion) {        res.json(suggestion);      })    });

使用 Jquery 进行 Ajax 调用

这是我在点击时触发的 PUT 请求。

$('#downvote').click(function(){        var user = {        user_id: current_user._id    }    $.ajax({        url: current_url + "suggestions/" + current_suggestion + '/downvote',        type: 'PUT',        data: user,        success: function(data){            //callback        }    });         }

结果

还有两点需要注意:

控制台将返回:

Failed to load resource: net::ERR_EMPTY_RESPONSE

最终只需单击一次有时会导致同一用户的 2 或 3 个被插入架构中的 downvote 数组。我在前端设置了一些保护措施来检查用户是否已经投票,但它似乎仍然通过了多次,所以我认为这是一个不同的问题。我相信我只是处理错误或遗漏了一些基本的东西。我只编码了 6 个月,所以我还在学习。谢谢!

最佳答案

而不是使用 $push运算符将用户 id 对象推送到 downvote 数组,使用 $addToSet运算符(operator)。这会向数组添加一个值,除非该值已经存在,在这种情况下 $addToSet对该数组不做任何事情。它仅确保没有重复的项目添加到集合中,并且不会影响现有的重复元素。如果该字段在要更新的文档中不存在,$addToSet创建具有指定值作为其元素的数组字段。所以你的最终路线看起来像:

router.put('/:suggestion_id/downvote', function(req, res, next) {
Suggestion.findByIdAndUpdate(
req.params.suggestion_id,
{$addToSet: {"downvote": req.body}},
function(err, suggestion) {
res.json(suggestion);
}
);
});

关于javascript - Put Request、JQuery、MongoDB 和 Mongoose 的更新问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30364091/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com