这是文档现在的样子。
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
)
我可能会忽略一件简单的事情......
答案 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 )
));