[英]MongoDB findAndModify not working with monk
我正在尝试将findAndModify
与node.js mongodb模块monk
。这是我正在使用的方法,这会在我的cmd
引发500
错误:
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);
}
});
我在这里获得了方法签名 。我得到了一个看起来像这样的错误,并且没有任何信息:
POST /notes/edit/542bdec5712c0dc426d41342 500 86ms - 1.35kb
Monk实现的方法比节点本机驱动程序提供的方法更符合方法签名的Shell语法。 因此,在这种情况下, .findAndModify()
的“外壳”文档更适合此处:
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部分中提供“ _id”字段,因为即使发生“ upsert”,该语句的“ query”部分中存在的任何内容也隐含在新文档中创建。
和尚文档还提示了用于方法签名的正确语法。
遇到了同样的问题,即使我喜欢它,接受的答案对我也不起作用。
还不够清楚,但是文档提示了正确的语法,从签名开始:
- 所有命令都接受简单的
data[, …], fn
。 例如
findAndModify({}, {}, fn)
从发现部分 :
users.findAndModify({ _id: '' }, { $set: {} });
最后,继续签名部分:
- 您可以在中间传递选项:
data[, …], options, fn
放在一起:
collection.findAndModify({
_id: '',
}, {
$set: {
value: '',
},
}, {
upsert: true,
});
因此,在这种情况下, data[, …]
是一对{}, {}
对象:查询和更新。 然后,您可以在代码段中将回调添加为第4个参数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.