Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/71.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
Javascript 使用Put请求、JQuery、MongoDB和Mongoose更新问题_Javascript_Jquery_Node.js_Mongodb_Mongoose - Fatal编程技术网

Javascript 使用Put请求、JQuery、MongoDB和Mongoose更新问题

Javascript 使用Put请求、JQuery、MongoDB和Mongoose更新问题,javascript,jquery,node.js,mongodb,mongoose,Javascript,Jquery,Node.js,Mongodb,Mongoose,我正在尝试使用MongoDB、Mongoose、JQuery和Node.js构建一个应用程序。每当我尝试添加到模式中的数组时,有时它会多次添加该项 模式 这是我的模式,我试图添加MyUpVote和downvote数组,以跟踪按id投票的用户 var SuggestionSchema = new mongoose.Schema({ title: String, content: String, link: String, upvote: [{

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

模式 这是我的模式,我试图添加MyUpVote和downvote数组,以跟踪按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' }, }); var SuggestionSchema=newmongoose.Schema({ 标题:字符串, 内容:字符串, 链接:字符串, 向上投票:[{ 用户id:{ 类型:Schema.ObjectId, 参考:“用户” } }], 否决票:[{ 用户id:{ 类型:Schema.ObjectId, 参考:“用户” } }], 用户id:{ 类型:Schema.ObjectId, 参考:“用户” }, 类别识别码:{ 类型:Schema.ObjectId, 参考:“类别” }, }); 路由与查询 这是我的放置路线和查询

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); }) }); router.put('/:suggestion_id/downvote',函数(req、res、next){ Suggestion.findByIdAndUpdate( 要求参数建议\u id, {$push:{“downvote”:req.body}, 功能(错误、建议){ res.json(建议); }) }); 使用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 } }); } $(“#向下投票”)。单击(函数(){ 变量用户={ 用户\u id:当前用户。\u id } $.ajax({ url:current_url+“suggestions/”+current_suggestion+“/downvote”, 键入:“PUT”, 数据:用户, 成功:功能(数据){ //回拨 } }); } 结果 还有两件事需要注意:

控制台将返回:

未能加载资源:net::ERR\u EMPTY\u响应

最终,单击一次有时会导致2或3个相同的用户被推到模式中的下一票数组中。我在前端设置了一些保护措施,检查用户是否已经投票,但它似乎仍然被推了多次,因此我认为这是一个不同的问题。我相信我只是在处理错误的问题,或者忽略了这一点基本方法。我只编写了6个月的代码,所以我还在学习。谢谢!

不要使用操作符将用户id对象推送到下一票数组,而是使用操作符。这会向数组添加一个值,除非该值已经存在,否则在这种情况下对该数组没有任何影响。它只会确保没有重复的值ems已添加到集合中,并且不会影响现有的重复元素。如果要更新的文档中缺少该字段,则会创建具有指定值作为其元素的数组字段。因此,最终路由如下所示:

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);
        }
    );
});

当这种情况发生时,您是否看到服务器上发生了多个请求?