FaunAdbにおける原子増分/デクリメント


I talk about how to atomically increment/decrement values in FaunaDB.



信用
ここでのオリジナルの答えhttps://news.ycombinator.com/item?id=24618998 .

コード
あなたがあると仮定してくださいarticle スキーマ
// Schema

Article {
  slug: string;
  likes: number;
}
原子的に増加するlikes , 呼び出す必要がありますUpdate() 2つのパラメータを指定します.
  • 文書参照
  • 更新する文書の一部
  • 更新するキーの値については、Add() 2つのパラメータを指定します.
  • Select() キーへのパスで、現在の値を取得するには
  • 値をインクリメント/デクリメント-1 減少する
  • // Query
    
    documentReference; // Assuming this is available
    Update(
      documentReference,
      {
        data: {
          likes: Add(
            Select(['data', 'likes'], Get(documentReference)),
            1
          )
        }
      }
    )
    
    ドキュメント参照が既知でない場合には、別の関数の出力として取得しますUpdate() インLambda() . 例えば、インデックスがあるとしますallArticles with terms ASdata.slug 書類を見つけることができるslug . 原子的に増加するlikes すべてのマッチしたドキュメントで
    // Query
    
    Map(
      Paginate(
        Match(
          Index('allArticles'),
          'article-about-faunadb'
        )
      ),
      Lambda(
        'X',
        Update(
          Var('X'),
          {
            data: {
              likes: Add(
                Select(['data', 'likes'], Get(Var('X'))),
                1
              )
            }
          }
        )
      )
    )
    
    乾杯!