Php 通过锂离子电池和MongoDB为内部阵列带来新价值

Php 通过锂离子电池和MongoDB为内部阵列带来新价值,php,mongodb,lithium,Php,Mongodb,Lithium,我有一个这样的结构: [_id] => MongoId Object ( [$id] => 4e91bcb40b7aab256c000000 ) [campaigns] => Array ( [0] => Array ( [campaign_id] => 4e91bcd10b7aab2b6c000000 [refer_code] => AjZCJR [owner] => 1

我有一个这样的结构:

[_id] => MongoId Object (
    [$id] => 4e91bcb40b7aab256c000000
)
[campaigns] => Array (
    [0] => Array (
        [campaign_id] => 4e91bcd10b7aab2b6c000000
        [refer_code] => AjZCJR
        [owner] => 1
        [campaign_name] => Test Campaign
        [users] => Array (
        )
    )
    [1] => Array (
        [campaign_id] => 4e9210600b7aab276c000000
        [refer_code] => FQIMJd
        [owner] => 1
        [campaign_name] => New Test Campaign
        [users] => Array (
        )
    )
)
我希望能够使用新字段更新活动数组,并在ID匹配时更新现有字段

目前,我正在尝试执行以下操作:

$data = array('campaign_name'=>'changed', 'new_field'=>'its new');
User::update(array('$push'=>array('campaigns.$'=>$data)),array('campaigns.campaign_id'=>$campaign_id));
但是,这不起作用-我正在使用positional操作符尝试将数组与condition语句匹配,因为如果没有它,它只会在活动数组中创建一个新数组

我知道我可能用错了,因为我认为应该这样做

'campaigns.$.campaign_name'=>'changed'
但是,我不想每次都只指定它,我想知道在不使用for循环和添加每个数据段的情况下进行此类更新的最佳方法,我目前正在执行以下操作:

$data = array();
foreach($this->request->data as $key=>$value) {
    $data['campaigns.$.'.$key] = $value;
}
User::update($data,array('campaigns.campaign_id'=>$campaign_id));
如果有人能让我知道这样做的“正确”方式,那就太好了

谢谢:

Dan

只需更新:

$co = array(
        '$pull' => array('campaigns.1" => array('campaign_name' => 'changed'' ) )
);

$p->update(array("_id" => new MongoId( $MongoID  )), $co);

“campaigns.1”是否只更新数组中的第一项?与数组项相反,数组项将查询?项与索引1 eq campaigns.2 campaigns.3 campaigns.4等匹配