繁体   English   中英

MongoDB findAndModify不能和尚一起使用

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM