1

这是文档现在的样子。

Array
(
    [email] => admin@mysite.com
    [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
    )

可能我忽略了一件简单的事情......

4

1 回答 1

0

您正在将数组运算符push与 MongoDb 不将其视为数组的数据结构一起使用(数组必须具有基于 0 的升序数字索引)。你必须把它当作一个对象。所以你有2个选择。

如果 in [21] => 0,该值0是无用的(我不希望如此),您可以使用一个真正的数组:

"emailQueries" : [21,22]

您可以push像这样在 PHP 代码中使用运算符

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

另一方面,如果你必须保持 value 0,例如,增加它,你必须将你的 EmailQuery 视为一个 object :

"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  ) 
                     ));
于 2013-09-04T08:45:45.913 回答