2013-07-28 111 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 ) 
        )); 
相关问题