我有这样的结构:
[_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));
然而这不起作用 - 我正在使用位置运算符来尝试将数组与条件语句匹配,因为没有它,它只是在campaign数组中创建一个新数组。
我知道我可能错误地使用它,因为我认为应该通过执行
来使用它'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));
如果有人能让我知道“正确”的方法,那就太棒了!
谢谢:)
丹
答案 0 :(得分:0)
只需更新:
$co = array(
'$pull' => array('campaigns.1" => array('campaign_name' => 'changed'' ) )
);
$p->update(array("_id" => new MongoId( $MongoID )), $co);