2012-07-04 4 views
0

업데이트 명령에 대한 더 나은 간단한 조건을 만들려고합니다. 그러나 나는 내가 검색 캠페인이 모든 사용자를 가져올 수있는 방법을 알아낼 수 없습니다 :배열 내의 필드를 찾고 업데이트하십시오.

"data" : "a name",  
"campaigns" : [  
      {  "id" : ObjectId("4ff3f07eacf4794426000154"), "name" : "test" }, 
      {  "id" : ObjectId("4ff3f07eacf4794426000154"), "name" : "fisk test2" } 
    ] 

는 내가하고 싶은 것은 어쩌면 "OS 2,012"을 "테스트"를 업데이트하는 것입니다. 아마 사용자가의 배열이 다른 캠페인을 제거하는 것입니다 해당 업데이트 문

db.users.update({"campaigns.name": "test"}, {$set : {campaigns: {'test' : 'OS 2012'}}}); 

문제 :

이 작업을 수행하려면,이 비슷한을 사용하는 줄 알았는데? 나는 단지 "test2"를 "test2"로 업데이트하고 싶습니다. 그리고 지금 당장은 $ pull과 $ addToSet을 먼저 사용하는 것이 가장 좋습니다.

더 좋은 방법이 있습니까? 예를 보여줄 수 있습니까?

당신에게 조언과 더 나은 지혜를 주셔서 감사합니다.

+0

'campaigns' 컬렉션이 있습니까? 나는 그것이 '사용자'였지만. –

+0

죄송합니다. – Ms01

+0

'db.users.find ({ "campaigns.name": "test"})'가 작동하지 않는다는 것은 무엇을 의미합니까? 나를 위해 일합니다. –

답변

1

the $ positional operator에 대해 자세히 알아보십시오. 이 코드는 작동합니다.

db.users.update({'campaigns.name': 'test'}, 
       {$set: {'campaigns.$.name': 'blah blah'}}) 
+0

대단히 감사합니다! – Ms01

+0

젠장, 너 빠르다. 하지만, 나는 그것을 바로 풀어 냈다. 그래서 나는 나의 코멘트를 삭제했다. {{set : { 'campaign': {id : ObjectId ("123 ..."), 이름 : 'blah blah'}}})' – Ms01

+0

멋지다. 당신이 직접 해결했다고 들었습니다. :) –

관련 문제