更新Put请求,JQuery,MongoDB和Mongoose的问题
我正在尝试使用MongoDB,Mongoose,JQuery和Node.js构build应用程序。 每当我试图添加到我的架构内的数组有时会添加该项目多次。
架构
这是我的模式,我试图添加我的upvote和downvote数组,跟踪他们的id投票的用户。
var SuggestionSchema = new mongoose.Schema({ 标题:string, 内容:string, 链接:string, upvote:[{ 用户名: { 键入:Schema.ObjectId, ref:'User' } }], downvote:[{ 用户名: { 键入:Schema.ObjectId, ref:'User' } }], 用户名: { 键入:Schema.ObjectId, ref:'User' }, category_id:{ 键入:Schema.ObjectId, ref:'Category' }, });
路线和查询
这是我的放置路线和查询
router.put('/:suggestion_id / downvote',函数(req,res,next){ Suggestion.findByIdAndUpdate( req.params.suggestion_id, {$ push:{“downvote”:req.body}}, function(错误,build议){ res.json(build议); }) });
使用jquery调用Ajax
这是我点击触发的PUT请求。
$( '#downvote')。点击(函数(){ var user = { user_id:current_user._id } $就({ url:current_url +“suggestions /”+ current_suggestion +'/ downvote', 键入:“PUT”, 数据:用户, 成功:function(数据){ //回电话 } }); }
结果
还有两件事要注意:
控制台将返回:
无法加载资源:net :: ERR_EMPTY_RESPONSE
和
最终仅仅点击一次有时会导致同一用户的2个或3个被推入Schema中的downvote数组中。 我在前端设置了一些检查用户是否已经投票的保护措施,但似乎还是经历了多次,所以我认为这是一个不同的问题。 我相信我只是接近错误或错过了根本的东西。 我只有6个月的编码,所以我还在学习。 谢谢!
而不是使用$push
操作符将用户id对象推送到downvote数组,请使用$addToSet
操作符。 这会为数组添加一个值,除非该值已经存在,在这种情况下, $addToSet
对该数组不做任何事情。 它只确保没有重复的项目被添加到集合中,并且不影响现有的重复元素。 如果该字段不存在于要更新的文档中, $addToSet
创build具有指定值的数组字段作为其元素。 所以你最终的路线将如下所示:
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); } ); });
- nodejs pdfkit将dynamic生成的PDF附加到电子邮件(Mandrill-API)
- 有没有代表本地范围的Javascriptvariables? 像全球?
- learnyounode – asynchronous杂耍 – http.get()的重复结果
- 数据在async.waterfall模型中传递不起作用?
- mongooseMissingSchemaError发生与摩卡testing不一致
- 用任意的gulpfile名称运行gulp(不是gulpfile.js)
- 我如何获得嵌套在两个分配函数和forEach循环内的值?
- Webpackparsing扩展名“Module not found”
- 需要使用node.js访问mysql数据库的帮助