18

我正在编写一个对关键字进行评分的小应用程序。因此,如果输入了“beirut”和“education”,如果他们以前没有见过,我想创建一个 mongo 条目,并给他们 1 分。如果有,我想将他们的分数增加 1 . 我正在尝试使用一个更新命令来执行此操作,但我认为我可能做错了。

  • 排名是代表数据库的对象
  • “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 {

您不能创建一个带有增量的全新文档吗?

4

1 回答 1

26

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

试试这个:

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在两者中都包含该字段。

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

于 2012-12-10T20:17:01.647 回答