MongoDB findAndModify不和monk一起工作

时间:2014-10-02 03:32:59

标签: javascript node.js mongodb monk

我正在尝试将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

2 个答案:

答案 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)
    •   
  •   

来自finding section

  

users.findAndModify({ _id: '' }, { $set: {} });

最后,继续签名部分:

  
      
  • 您可以在中间传递选项:data[, …], options, fn
  •   

全部放在一起:

collection.findAndModify({
    _id: '',
}, {
    $set: {
        value: '',
    },
}, {
    upsert: true,
});

所以在这种情况下,data[, …]是成对的{}, {}个对象:查询和更新。然后,您可以将回调添加为我的代码段中的第4个参数。