Javascript 节点+;mongo:更新记录需要回调

Javascript 节点+;mongo:更新记录需要回调,javascript,node.js,mongodb,Javascript,Node.js,Mongodb,因此,我正在使用socket.io侦听事件,一旦触发,我将尝试将记录更新为新值 socket.on('contentEdited', function (newContent) { collection.update( { '_id' : ObjectId("5279262e74d92da751eb2b8e") }, { $set: { 'content': newContent } } ), function (err, result

因此,我正在使用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期望的方式提供回调


对此还是有点陌生,谢谢

我认为您的问题是回调函数需要在更新函数调用内部,而不是外部。nodejs MongoDB驱动程序的格式可在此处找到:

所以它应该是这样的:

collection.update(
   { '_id' : ObjectId("5279262e74d92da751eb2b8e") }, 
   { $set: { 'content': newContent } },
   function (err, result) {
      if (err) throw err;
      console.log(result);
   })
请注意,括号已移到回调函数之后

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

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

您可以在此处了解有关写入关注点的更多信息:

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

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

对。也许你的语法错了。这可能会让它变得更好

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);
   });

})


我对mongo不太了解,但一个快速的google写关注点产生了:是的,我读到了,但我需要对这个用例有强烈的写关注,成功回调会很有用。我应该在最初的帖子中提到这一点,但我知道我可以让它与w:0一起工作,但数据完整性在这个用例中很重要。你的答案看起来很正确。我会在我的mac电脑上试试,然后跟进。谢谢