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()를 호출해야 합니다.
  • 문서 참조
  • 업데이트할 문서의 일부

  • 키 값을 업데이트하려면 두 개의 매개변수를 사용하여 Add()를 호출합니다.
  • Select() 키에 대한 경로를 사용하여 현재 값 가져오기
  • 증가/감소할 값 (우리의 경우 1, 감소에 -1 전달)

  • // Query
    
    documentReference; // Assuming this is available
    Update(
      documentReference,
      {
        data: {
          likes: Add(
            Select(['data', 'likes'], Get(documentReference)),
            1
          )
        }
      }
    )
    


    문서 참조를 알 수 없고 다른 함수의 출력으로 얻는 상황에서 Update() 에서 Lambda()를 호출합니다. 예를 들어, allArticles로 문서를 찾을 수 있도록 termsdata.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
              )
            }
          }
        )
      )
    )
    



    건배!

    좋은 웹페이지 즐겨찾기