Mongodb는 필요합니다 $inc
운영자 때문에 :
- MongoDB의 원자 연산은 특정 저수준 지원 없이는 어렵습니다.
- 인터페이스는 표현하기에 충분히 풍부하지 않습니다
c = c + 1
특수 운영자없이.
당신은 단지 표현하기 만하면됩니다 c = c + 1
HSTORES와 함께. 이 작업은 hstores가 열쇠와 값 모두에 문자열을 사용하고 캐스팅의 혼란을 느끼기 때문에 약간 복잡합니다. 나는 당신이 다음과 같은 불쾌한 것을 붙잡고 있다고 생각합니다.
update t
set h = h || hstore('my_counter', ((h -> 'my_counter')::integer + 1)::text)
where mykey = myval
그만큼 (h -> 'my_counter')::integer + 1
값을 추출하여 증분을 수행합니다 (h -> 'my_counter'
), 정수에 캐스팅하고 하나를 추가합니다. 그런 다음 하나의 요소 HSTORE를 만듭니다 hstore('my_counter', ...)
그리고 명백한 ::text
PostgreSQL이 원하는 기능을 알고 있는지 확인하기 위해 값을 발사하십시오. 마지막으로, 당신은 원래의 hstore에 새로운 키 값을 연결합니다. h || hstore(...)
이전 값을 대체합니다.
항상 그다지 불쾌한 혼란을 사용하고 싶지 않다면 간단한 기능을 감싸고 말할 수 있습니다.
update t
set h = hstore_inc(h, 'my_counter', 1)
where ...
nastiness를 숨기기 위해.
나는 그것을 할 수있는 다른 방법이 있다고 확신합니다 (다양한 배열로/ 기능은 아마도) 그러나 위는 작동해야합니다.