2013-07-28 2 views
1

다음은 문서의 모양입니다. 아마MongoDB 업데이트 쿼리 (문서의 배열 필드 업데이트)

[emailQueries] => Array 
    (
     [21] => 0 
     [22] => 0 
    ) 

간단한 일이 : 여기

Array 
(
    [email] => [email protected] 
    [emailQueries] => Array 
     (
      [0] => Array 
       (
        [21] => 0 
       ) 

      [1] => Array 
       (
        [21] => 0 
       ) 

     ) 

    [last_visit] => 1375050871 
) 

내가 그러나 emailQueries

$arrayValueToAdd = array((string) $email_id => '0'); 

$collection->update(array('email' => $user['email']), 
        array('$push' => 
          array('emailQueries' => $arrayValueToAdd) 
        ) 
       ); 

을 채우기 위해 사용하고있는 코드입니다, 나는 단순히 emailQueries 배열 모양을 가지고 싶습니다 내가 간과하고있어 ...

답변

0

배열 연산자 0을 사용하고있다.은 MongoDb에서 배열 (array must have 0-based ascending numeric indexes)로 간주하지 않는 데이터 구조입니다. 이것을 개체로 취급해야합니다. 그래서 두 가지 선택이 있습니다.

[21] => 0에 값 0 (그리고 내가 그렇게 기대하지 않습니다) 쓸모가 있다면, 당신은 진정한 배열을 사용할 수 있습니다

"emailQueries" : [21,22] 

을하고이 같은 PHP 코드에서 push 연산자를 사용할 수 있습니다

: 한편
$collection->update(array('email' => $user['email']), 
        array('$push' => 
         array('emailQueries' => (string) $email_id) 
        )); 

, 당신은 값 0을 유지하고, 예를 들어해야하는 경우, 그것을 증가, 당신은 객체로 간주하여 EmailQuery에 있습니다
"emailQueries" : { 
    "21" : 0, 
    "22" : 0 
} 

그래서 당신은 emailQueries에 필드를 추가하는 간단한 업데이트를 사용할 수 있습니다

$collection->update(array('email' => $user['email']), 
        array('$set' => 
         array('emailQueries.'.$email_id => 0 ) 
        )); 

그리고 $inc을 점진을 위해 :

$collection->update(array('email' => $user['email']), 
        array('$inc' => 
         array('emailQueries.'.$email_id => 1 ) 
        )); 
관련 문제