2012-09-18 7 views
3

확인 하위 배열을 삽입, 나는 다음과 같은MongoDB를 업데이트하거나

나는 몽고가

array (
    '_id' => new MongoId("50513d8338fc5de706000000"), 
    'offers' => 
    array (
    '0' => 
    array (
     'minspend' => '50.00', 
     'cashback' => '1.50', 
     'percentage' => '0.03', 
    ), 
    '1' => 
    array (
     'minspend' => '100.00', 
     'cashback' => '3.00', 
     'percentage' => '0.03', 
    ), 
), 
    'percentageTotal' => '0.06', 
    'test' => new MongoInt32(1), 
) 

는하지만, 나는 단지이 부분을 업데이트 할 말할 수로 수집해야 할 거리가 필요

array (
     '0' => 
     array (
      'minspend' => '50.00', 
      'cashback' => '1.50', 
      'percentage' => '0.03', 
     ), 

해당 배열의 전체 데이터 컬렉션을 다시 만들지 않고 하위 배열의 해당 부분을 변경하는 가장 좋은 방법은 무엇입니까?

같은 것을 할 수 있습니다이

array (
     '0' => 
     array (
'Offer_id'=> new MongoId(5715671561715), 
      'minspend' => '50.00', 
      'cashback' => '1.50', 
      'percentage' => '0.03', 
     ), 

)

당신은 업데이트 할 배열의 요소를 지정하는 점 표기와 함께 $set을 사용할 수 있습니다

답변

4

:

$collection->update(
    array("_id" => new MongoId("50513d8338fc5de706000000")), 
    array("$set" => array("offers.0" => 
     array (
      'minspend' => '50.00', 
      'cashback' => '1.50', 
      'percentage' => '0.03', 
     ) 
    )) 
); 

offers.0은 배열의 0 번째 (= 첫 번째) 요소를 나타냅니다. 두 번째 것을 업데이트하려면 offers.1을 키로 사용하십시오.

두 번째 질문은 MongoId를 하위 문서에 추가하려고한다고 가정합니다. minspend 전에 'Offer_id' => new MongoId(),을 추가하여 동일한 방식으로 처리 할 수 ​​있습니다. 이것은 새로운 유일한 MongoId를 만들고 그것을 하위 문서에 추가 할 것입니다. 대신 기존 MongoId를 추가하려면 new MongoId("...")을 사용하고 ...을 24 자리 16 진수 긴 문자열로 바꿉니다.

이미 OFFER_ID을 가지고 해당 ID를 일치하는 서비스를 변경하려는 경우, 당신은 위치 $ 구문을 사용할 수 있습니다

$collection->update(
    array("_id" => new MongoId("50513d8338fc5de706000000"), 
      "offers.Offer_id" => new MongoId("5059637720dfeda164ec0fe7")), 

    array("$set" => array("offers.$" => 
     array (
      'minspend' => '50.00', 
      'cashback' => '1.50', 
      'percentage' => '0.03', 
     ) 
    )) 
); 

당신은에 대한 추가 올바른 _id와 함께 문서에 대한 쿼리를 offers.Offer_id. 명령의 업데이트 부분에서 offers.$을 사용합니다. 여기서 $는 Offer_id가 포함 된 올바른 하위 문서와 자동으로 일치합니다.

+0

내가 제안을 가지고 있다면. []. offer_id 내가 minspend 등을 업데이 트하는 데 사용할 수 있습니까? – RussellHarrower

+0

그런 경우 쿼리의 offer_id를 두 번째 조건으로 사용하십시오 (_id 및 offers.offer_id를 쿼리하고 $ sign을 위치 인수로 사용하십시오.) 위치 연산자가 작동하는 방법은 다음을 참조하십시오. http://www.mongodb.org/display/DOCS/Updating # Updating-Updating-% 24positionaloperator – Thomas

+0

당신이 이것을 설명해 주시겠습니까? 예를 들어 문서가 정말 도움이되지 않습니다. – RussellHarrower