我正试图将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
最佳答案
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
运算符,其中您只希望在创建文档时应用字段。当像这样的操作符不被应用时,“整个”文档将被替换为您为“更新”指定的任何内容。您也不需要在update部分中提供“\u id”字段,因为即使发生“upsert”,语句的“query”部分中的任何内容都隐含在新文档中创建。
monk文档还提示了method signature要使用的正确语法。