Node.js MongoDB Upsert更新

时间:2012-12-10 20:09:02

标签: node.js mongodb upsert

我正在写一个对关键字进行评分的小应用程序。因此,如果“贝鲁特”和“教育”进入,如果以前没有见过,我想创建一个mongo条目,并给他们1分。如果他们有,我想将他们的分数增加一。我试图用一个更新命令来做这个,但我想我可能做错了。

  • Ranking是表示数据库的对象
  • “key”是关键字
rankingdb.update(
    {keyword:key},
    {keyword:key, {$inc:{score:1}}},
    {upsert:true, safe:false},
    function(err, data) {
      if (err) {
          console.log(err);
      }
      else {
          console.log("score succeeded");
      }
    }
);

SyntaxError: Unexpected token {

您是否可以使用增量创建一个全新的文档?

1 个答案:

答案 0 :(得分:24)

您的一般方法是正确的,但正如错误消息所示,您的代码中存在语法问题。

请改为尝试:

rankingdb.update(
    {keyword: key},
    {$inc: {score: 1}},
    {upsert: true, safe: false},
    function(err,data){
        if (err){
            console.log(err);
        }else{
            console.log("score succeded");
        }
    }
);

当upsert需要创建一个新对象时,它会在创建对象时组合选择器(第一个参数)和更新对象(第二个参数)中的字段,因此您不需要包含keyword字段在两者中。

请注意,2.0驱动程序中不推荐使用update(),因此您现在应该使用updateOne()updateMany()