我尝试使用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 })
答案 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.update
,updateOne
或updateMany
答案 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" });
})