【问题标题】:node + mongo: updating a record requires a callbacknode + mongo:更新记录需要回调
【发布时间】:2021-01-28 03:56:06
【问题描述】:

所以我正在使用 socket.io 监听一个事件,一旦触发,我会尝试将记录更新为新值。

socket.on('contentEdited', function (newContent) {

collection.update(
    { '_id' : ObjectId("5279262e74d92da751eb2b8e") }, 
    { $set: { 
      'content': newContent
      } 
    }
  ), function (err, result) {
    if (err) throw err;
    console.log(result)
  };

});

语法在shell中有效,但在事件触发时会在节点中抛出以下错误:

错误:如果没有提供回调,就无法使用 writeConcern

之后我尝试在末尾添加一个函数以进行基本错误检查,但我不确定如何以 mongo 期望的方式提供回调。

还是有点新,谢谢

【问题讨论】:

  • 对 mongo 了解不多,但快速搜索了一下关于写入问题的谷歌:docs.mongodb.org/manual/core/write-concern
  • 是的,我读到了,但我需要对此用例有强烈的写入关注,并且成功回调会很有用。

标签: javascript node.js mongodb


【解决方案1】:

我认为您的问题是回调函数需要在更新函数调用内部而不是在它外部。 nodejs MongoDB 驱动的格式可以在这里找到:http://mongodb.github.io/node-mongodb-native/api-generated/collection.html#update

所以它应该是这样的:

collection.update(
   { '_id' : ObjectId("5279262e74d92da751eb2b8e") }, 
   { $set: { 'content': newContent } },
   function (err, result) {
      if (err) throw err;
      console.log(result);
   })

注意括号在回调函数之后移动了。

您还可以将写入关注点设置为“未确认”而不是“已确认”。

“写入关注点”的 MongoDB 概念决定了您希望 MongoDB 成功写入数据库的确定程度。最低级别的写入关注,“未确认”只是将数据写入服务器而不等待响应。这曾经是默认值,但现在默认值是等待 MongoDB 确认写入。

您可以在此处了解有关写入问题的更多信息: http://docs.mongodb.org/manual/core/write-concern/

要将写入关注设置为未确认,请添加选项{w: 0}

collection.update(
   { '_id' : ObjectId("5279262e74d92da751eb2b8e") }, 
   { $set: { 'content': newContent } },
   { w : 0 });

【讨论】:

  • 我应该在原帖中提到这一点,但我知道我可以使用 w:0,但在这个用例中数据完整性很重要。你的回答看起来不错。当我到达我的Mac并跟进时,我会尝试它。谢谢!
【解决方案2】:

是的。也许你有错误的语法。这可能会让它变得更好

socket.on('contentEdited', function (newContent) {

collection.update(
   { '_id' : ObjectId("5279262e74d92da751eb2b8e") }, 
   { $set: 
       { 'content': newContent } 
   },
   {returnOriginal : false},
   function (err, result) {
      if (err) throw err;
      console.log(result);
   });

})

【讨论】:

    猜你喜欢
    • 2021-08-22
    • 1970-01-01
    • 1970-01-01
    • 2018-05-07
    • 2023-04-01
    • 1970-01-01
    • 2021-10-04
    • 2013-06-14
    • 1970-01-01
    相关资源
    最近更新 更多