簡體   English   中英

使用Lithium和MongoDB將新值推入內部數組

[英]Push new value to inner array with Lithium and MongoDB

我有這樣的結構:

[_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));

但是,這不起作用-我正在使用位置運算符,以嘗試將數組與條件語句匹配,因為沒有它,它只是在Campaigns數組內創建了一個新數組。

我了解我可能錯誤地使用了它,因為我認為應該這樣做

'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));

如果有人可以讓我知道執行此操作的“正確”方法,那就太好了!

謝謝 :)

只需更新:

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM