2012-12-22 1 views
3

나는이와 비슷한 문서가 있습니다증가 A : MongoDB를 몽구스 드라이버 객체의 배열 내에서 {키 값}

{ 
    'user_id':'{1231mjnD-32JIjn-3213}', 
    'name':'John', 
    'campaigns': 
     [ 
      { 
       'campaign_id':3221, 
       'start_date':'12-01-2012', 
       'worker_id': '00000' 
      }, 
      { 
       'campaign_id':3222, 
       'start_date':'13-01-2012', 
       'worker_id': '00000' 
      }, 
      ... 
      etc 
      ... 
     ] 
} 

내가 campaigns 배열의 요소 (7)의 campaign_id를 증가 할 말을 . 몽구스 드라이버와 dot를 사용
, 나는 내가 이것을 할 수있는 생각 :

camps.findOneAndUpdate({name: "John"}, {$inc: {"campaigns.7.campaign_id": 1}}, upsert: true, function(err, camp) {...etc...});

이것은 campaign_id을 증가하지 않습니다.
이것을 늘리려면 어떤 제안이 필요합니까?

답변

8

올바른 생각이 들지만 upsert 옵션의 형식이 올바르지 않습니다.

이 시도 : 내가 이해하지 못하는 몇 가지 이유를 들어

camps.findOneAndUpdate(
    {name: "John"}, 
    {$inc: {"campaigns.7.campaign_id": 1}}, 
    {upsert: true}, 
    function(err, camp) {...etc...}); 
+0

, 내가 말한다면 : '. 캠페인''VAR 업데이트 =을 + position + ".campaign_id"'그리고 나서 $ inc : {update : 1}'은 작동하지 않습니다 ('position'은 정수입니다). 위와 같이 써도 괜찮습니다 :'$ inc : { "campaigns.7.campaign_id": 1}'. 왜 그런지 알아? – user1460015

+2

JavaScript 직접 개체에서 변수를 키 이름으로 사용할 수 없기 때문에. 따라서 업데이트 개체를 프로그래밍 방식으로 작성해야합니다. 'var update = {$ inc : {}}; $ inc [ '캠페인.' + position + ".campaign_id"] = 1; ' – JohnnyHK

+0

아 ... 흥미 롭습니다. 감사! – user1460015