2

我正在尝试使用findAndModifynode.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);
    }   
});

我在这里获得了方法签名。我收到一个看起来像这样的错误并且没有提供信息:

 POST /notes/edit/542bdec5712c0dc426d41342 500 86ms - 1.35kb
4

2 回答 2

3

Monk 实现的方法更符合方法签名的 shell 语法,而不是节点本机驱动程序提供的方法。所以在这种情况下,“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只希望在创建文档时应用字段的运算符。当没有应用这样的运算符时, “整个”文档将替换为您为“更新”指定的任何内容。

您也不需要在更新部分提供“_id”字段,因为即使发生“更新插入”,语句的“查询”部分中存在的任何内容都暗示要在新文档中创建。

僧侣文档还暗示了用于方法签名的正确语法。

于 2014-10-02T03:59:02.363 回答
0

有同样的问题,即使我喜欢它,接受的答案对我不起作用。

这还不够清楚,但文档提示了正确的语法,从签名开始:

  • 所有命令都接受简单的data[, …], fn. 例如
    • findAndModify({}, {}, fn)

发现部分

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

最后,继续签名部分:

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

把它们放在一起:

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

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

于 2015-12-29T18:42:56.853 回答