猫鼬更新不会立即回拨

mongoose update not calling back instantly

我确定这只是一个误会,但我想不通:/

我正在尝试在 mongoDB 中使用节点服务器上的 mongoose 更新文档。

我的代码如下所示:

Message.update(searchQuery, updateQuery, function(err, response)
{
    if(err) return handleError(err);
    if(response) console.log(util.inspect(response));
});

当我第一次调用这个函数时,没有执行回调,也没有对数据库应用任何更改。实际上,更新不会发生。

当我第二次调用该函数时,第一次调用的回调 returns 和第一次更新的更改将应用​​于数据库。第二次调用的回调没有 return 但是第二次调用没有应用任何更改。

当我第三次调用它时,应用了回调 2 returns 和更改 2,但没有应用回调和更改 3。依此类推...

我假设它与猫鼬函数有关,当没有指定回调时不直接执行,所以我尝试添加一个空的 "options" 数组:

Message.update(searchQuery, updateQuery, **{}**, function(err, response){...});

或明确执行更新:

Message.update(searchQuery, updateQuery).exec( function(err, response){...});

虽然结果没有改变。

使用猫鼬调用更新的正确方法如下:

Message.update(query, update).exec(callback);

你的 updateQuery 中到底是什么?

缺少 Mongoose 回调通常是由更新等待连接打开引起的,因为对 updatesavefind 等的任何调用都将排队通过 Mongoose 直到 mongoose.connect 调用完成。

因此,请确保在拨打 update 之前先拨打 mongoose.connect 电话。