10

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

还是有点新,谢谢

4

2 回答 2

17

我认为您的问题是回调函数需要在更新函数调用内部而不是在其外部。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 的“Write Concerns”概念决定了您希望 MongoDB 成功写入数据库的确定性。最低级别的写入关注,“未确认”只是将数据写入服务器而不等待响应。这曾经是默认值,但现在默认值是等待 MongoDB 确认写入。

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

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

collection.update(
   { '_id' : ObjectId("5279262e74d92da751eb2b8e") }, 
   { $set: { 'content': newContent } },
   { w : 0 });
于 2013-11-06T05:03:38.347 回答
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);
   });

})

于 2021-01-27T19:56:06.160 回答