2013-07-28 110 views
1

以下是文檔現在的樣子。MongoDB更新查詢(更新文檔中的數組字段)

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陣列樣子:

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

可能是一個簡單的事情我忽略了...

回答

0

您正在使用數組運算符push,MongoDb沒有將數據結構視爲數組(array must have 0-based ascending numeric indexes)。你必須把它當作一個物體。 所以你有2個選擇。

如果[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 ) 
        )); 
相關問題