我正在尝试将findAndModify
与node.js mongodb模块monk
一起使用。这是我正在使用的方法,这会在500
中引发cmd
错误}:
notesCollection.findAndModify({_id:_id},[],{_id:_id,title:title,content:content},{'new':true,'upsert':true},function(err,doc){
if(err)
console.error(err);
else
{
console.log("Find and modify successfull");
console.dir(doc);
}
});
I obtained the method signature here。我收到的错误看起来像这样并且没有信息:
POST /notes/edit/542bdec5712c0dc426d41342 500 86ms - 1.35kb
答案 0 :(得分:3)
Monk实现的方法更符合方法签名的shell语法,而不是节点本机驱动程序提供的方法。因此,在这种情况下,.findAndModify()
的“shell”文档更适合此处:
notescollection.findAndModify(
{
"query": { "_id": id },
"update": { "$set": {
"title": title,
"content": content
}},
"options": { "new": true, "upsert": true }
},
function(err,doc) {
if (err) throw err;
console.log( doc );
}
);
同时注意到您应该使用$set
运算符,或者甚至是$setOnInsert
运算符,只需要在创建文档时应用字段。当像这样的运营商重新不时,“整个”文档将替换为您为“更新”指定的任何内容。
您也不需要在更新部分提供“_id”字段,因为即使发生“upsert”,语句的“查询”部分中存在的任何内容也暗示在新文档中创建
和尚文档还暗示了用于method signature的正确语法。
答案 1 :(得分:0)
有同样的问题,即使我喜欢它,接受的答案也不适用于我。
目前还不够清楚,但文档提示正确的语法,从signatures开始:
- 所有命令都接受简单的
data[, …], fn
。例如
findAndModify({}, {}, fn)
users.findAndModify({ _id: '' }, { $set: {} });
最后,继续签名部分:
- 您可以在中间传递选项:
data[, …], options, fn
全部放在一起:
collection.findAndModify({
_id: '',
}, {
$set: {
value: '',
},
}, {
upsert: true,
});
所以在这种情况下,data[, …]
是成对的{}, {}
个对象:查询和更新。然后,您可以将回调添加为我的代码段中的第4个参数。