我确信这只是一种误解,但我无法弄清楚:/
我正在尝试使用mongoose在节点服务器上更新mongoDB中的文档。
我的代码如下所示:
Message.update(searchQuery, updateQuery, function(err, response)
{
if(err) return handleError(err);
if(response) console.log(util.inspect(response));
});
当我第一次调用此函数时,不会执行回调,也不会对数据库进行任何更改。实际上,更新不会发生。
当我第二次调用该函数时,第一次调用的回调将返回,并且第一次更新的更改将应用于DB。第二次调用的回调虽然没有返回,但第二次调用没有任何变化。
当我第三次调用它时,回调2返回并应用更改2,但不回调并更改3.依此类推......
我认为它与没有指定回调时直接执行的mongoose函数有关,所以我尝试添加一个空的“options”数组:
Message.update(searchQuery, updateQuery, **{}**, function(err, response){...});
或明确执行更新:
Message.update(searchQuery, updateQuery).exec( function(err, response){...});
但结果没有改变。
答案 0 :(得分:1)
缺少Mongoose回调通常是由等待连接打开的更新引起的,因为对update
,save
,find
等的任何调用都将由Mongoose排队直到mongoose.connect
来电完成。
因此,在致电mongoose.connect
之前,请确保拨打update
。