web-dev-qa-db-ja.com

Node.jsMongoDBアップサートの更新

キーワードを採点する小さなアプリケーションを書いています。したがって、「ベイルート」と「教育」が入力された場合、それらが以前に表示されたことがない場合は、モンゴエントリを作成し、スコアを1にします。ある場合は、スコアを1つ増やします。 。 1つの更新コマンドでこれを実行しようとしていますが、間違っている可能性があります。

  • ランキングはデータベースを表すオブジェクトです
  • 「キー」はキーワードです
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 {

増分で新しいドキュメントを作成できませんか?

16
mradfo21

一般的なアプローチは正しいですが、エラーメッセージが示すように、コードに構文上の問題があります。

代わりにこれを試してください:

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

アップサートが新しいオブジェクトを作成する必要がある場合、オブジェクトの作成時にセレクター(最初のパラメーター)と更新オブジェクト(2番目のパラメーター)のフィールドを組み合わせるため、両方にkeywordフィールドを含める必要はありません。 。

update() は2.0ドライバーで非推奨になっているため、updateOne()またはupdateMany()のいずれかを使用する必要があることに注意してください。

25
JohnnyHK