我正试图将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要使用的正确语法。

07-28 09:39