Javascript 节点+;mongo:更新记录需要回调
因此,我正在使用socket.io侦听事件,一旦触发,我将尝试将记录更新为新值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.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电脑上试试,然后跟进。谢谢