This page은 이전에 검색된 (찾기) 문서에 도달하고이를 업데이트하기 위해 하위 요소 (배열)에 쿼리를 업데이트하는 것을 보여줍니다. 나는 똑같은 일을 꽤 많이 할 필요가있다. 예제에 대한 코드 : 지배하는 규칙은 무엇mongodb find 업데이트 의미 다음에
> t.find()
{ "_id" : ObjectId("4b97e62bf1d8c7152c9ccb74"), "title" : "ABC",
"comments" : [ { "by" : "joe", "votes" : 3 }, { "by" : "jane", "votes" : 7 } ] }
> t.update({'comments.by':'joe'}, {$inc:{'comments.$.votes':1}}, false, true)
는 발견 - 다음 -에 의해 업데이트, 나는 문서에서 이에 대한 설명을 발견하지 않았습니다. 드라이버를 통해 mongodb 사용에도 동일한 내용이 적용됩니까? 관련 의미에 대한 링크가 도움이 될 것입니다. C++ 드라이버를 사용하고 있습니다.
편집 : 자동 응답
2 개 명령을 합해서 하나로 할 수 있습니다 (이이 질문이 제기 모호성 제거하는 방법 중 하나입니다)하는 배열을 참조 할 수있는 업데이트의 쿼리 부분을 하위 요소이며, $
심볼은이를 참조합니다. 업데이트 작업의 쿼리 부분에서 하나의 하위 요소 만 참조 할 수 있다고 가정합니다. 다음과 같이 내 경우에는 업데이트 작업은 같습니다
db.qrs.update ({ "_id" : ObjectId("4f1fa126adf93ab96cb6e848"), "urls.u_id" : 171 }, { "$inc" : { "urls.$.CC": 1} })
_id
제대로 "소수가"우측 고유 행, 두 번째 쿼리 요소 "urls.u_id" : 171
문제의 행이 오른쪽 필드를 가지고 있음을 보장합니다. urls.$.CC
다음 올바른 배열 항목을 $inc
작업을 라우팅합니다.
어떤 MongoDB를 dev에 또는 문서 작가에 대한 권고가이
그들을 잠재적 경쟁 조건을 가지고 예를 표시하지 않습니다. 원자 적으로 수행 할 수있는 여러 작업 표시를 항상 방지하십시오.
@ 스스로 대답. 예제에 2 단계 작업이 있다고 잘못 가정합니다. 그렇지 않습니다. 저자는 컬렉션에있는 문서의 구조를 업데이트 예제를 표시하기 전에 find를 사용하여 독자에게 보여 주기만하면됩니다. –