使用mongoose通过update方法在mongodb中为现有文档添加新字段

时间:2017-02-09 02:48:40

标签: node.js mongodb mongoose

我尝试使用node.js中的mongoose更新mongodb文档

如果该字段存在,则更新有效,但如果该字段不存在,则更新将不起作用。

我想在文档中添加新字段。

MongoDB查询(https://docs.mongodb.com/v3.2/reference/operator/update/set/#behavior)正在运行:

db.getCollection('users').update({ 'uid': 'uid' }, { $set: { 'vehicle_status': 'bike' } })  

但是当它在mongoose中完成时它将不起作用。使用$ set不会添加字段。

User.update({ uid: uid }, { $set: { vehicle_status: vehicleSatus } }, { multi: true })

3 个答案:

答案 0 :(得分:13)

请尝试以下代码:

User.update(
     {uid: 'uid'}, 
     {vehicle_status : 'vehicleSatus' },
     {multi:true}, 
       function(err, numberAffected){  
       });

另外,请确保将vehicle_status添加到架构中。

答案 1 :(得分:1)

在2019年完成此解决方案。

请注意:(function($) { // default var defaults = { touchduration: 200, touch: function(){ alert("Touch"); return false; }, longtouch: function(){ alert("Long touch"); return false; } }, timerInterval, leftTimer, _this; var methods = { init: function(params) { var _this = this, options = $.extend({}, defaults, params), init = $(this).data('fctouch'); if(init) return this; else { $(this).data('options', options); /* Here is my trouble place */ $(document) .on('touchstart', this, function() { touchstart() } ) .on('touchend', this, function() { touchend() } ); return $(this); } }, destroy: function() { $(_this).off().removeData(); } }; function timer(interval) { interval--; leftTimer = interval; if(interval >= 0) { timerInterval = setTimeout(function() { timer(interval); }); } else { $(_this).data("options").longtouch(); touchend(); } } function touchstart() { timer($(_this).data("options").touchduration); } function touchend() { if(leftTimer >= 100) $(_this).data("options").touch(); clearTimeout(timerInterval); } $.fn.fctouch = function(method) { if(methods[method]) { return methods[method].apply(this, Array.prototype.slice.call(arguments, 1)); } else if(typeof method === 'object' || !method) { return methods.init.apply(this, arguments); } else { $.error( 'Method "' + method + '" doesnt found' ); } }; })(jQuery); 已过时。改用collection.updateupdateOneupdateMany

答案 2 :(得分:0)

总是根据新情况 使用{ upsert:true }。

upsert-如果设置为true并且没有与查询匹配的记录,则替换对象将作为新记录插入。

   user.updateOne(
                 { email: req.body.email },
                 { $set: { name: 'Aaakash'}},{upsert:true}).then((result, err) => {
                    return res.status(200).json({ data: result, message:"Value Updated" });
                })