Monger에는 새로 삽입 한 문서를 반환하기위한 insert-and-return
함수가 있습니다.업데이트 된 문서를 Monger로 반환
update-and-return
기능이 없습니다.
업데이트를 실행하는 함수에서 업데이트 된 문서를 어떻게 반환 할 수 있습니까?
나는이 기능을 사용하여 $push
과 같은 연산자를 사용할 수 없다고 생각하지만 save-and-return
을 사용할 수 있다고 생각합니다.
Monger에는 새로 삽입 한 문서를 반환하기위한 insert-and-return
함수가 있습니다.업데이트 된 문서를 Monger로 반환
update-and-return
기능이 없습니다.
업데이트를 실행하는 함수에서 업데이트 된 문서를 어떻게 반환 할 수 있습니까?
나는이 기능을 사용하여 $push
과 같은 연산자를 사용할 수 없다고 생각하지만 save-and-return
을 사용할 수 있다고 생각합니다.
두 가지 옵션이 있습니다.
첫 번째 옵션은 find-and-modify
기능을 JohnnyHK's solution을 사용하는 것입니다
(mc/find-and-modify "users"
(select-keys my-doc [:_id])
{ $push { :awards { :award "IBM Fellow"
:year 1963
:by "IBM" }}}
:return-new true)
두 번째 옵션은 save
대신 update
을 사용하는 것입니다. mongodb에서 전체 문서를 이미로드 한 경우 좋은 선택입니다. $push
과 같은 mongodb 연산자를 update-in과 같은 clojure
함수로 쉽게 바꿀 수 있습니다. clojure 맵을 이용한 조작은 나에게 더 나은 접근 방법으로 보인다. mongodb 운영자를위한 clojure 대안을 찾는 데 문제가 있으면 도움을 드릴 수 있습니다.
내 앞의 예를 들어 그것은 다음과 같이 표시됩니다
(mc/save-and-return "users"
(update-in my-doc [:awards] conj
{ :award "IBM Fellow"
:year 1963
:by "IBM" }))
나 자신을 더 Clojure의 틱 보이기 때문에 나는이 방법을 선호합니다.
이것은 Monger의 find-and-modify
기능의 목적입니다.
;; Atomically find the doc with a language of "Python", set it to "Clojure", and
;; return the updated doc.
(mgcol/find-and-modify collection
{:language "Python"}
{:$set {:language "Clojure"} }
:return-new true)
감사합니다. 나는 레오 니드의 대답을 받아 들였다. 왜냐하면 레오 니드의 대답은 더 낮은 평판을 얻었 기 때문에 그는 현상금에 더 많은 혜택을 줄 것이다. 두 대답을 모두 받아 들일 수 없기 때문에 나는 적어도 당신의 것을지지했다. 희망이 당신을 위해 괜찮습니다. – tobiasbayer
@ CodeBrickie 레오 니드가 기본적으로 내 대답을 복사했기 때문에 나는 동의 할 수 없다. 그러나 오비완이 말했듯이 : "당신은 당연하다고 생각하는 것을해야합니다." – JohnnyHK
그는 당신을 복사하고 두 번째 옵션을 추가했습니다. 그래서 그는 상당한 가치를 창출했습니다. – tobiasbayer