2016-04-07 50 views
0

我想在我的文檔上運行更新,我使用upsert true但仍然覆蓋?MongoDB Upsert不能在PHP中工作

$col = "A" . $user->agencyID; 
$db = $m->rules; 
$collection = $db->$col; 

$validValue = $_POST['validValue']; 
$id = $_POST['ruleID']; 

$document = array(
    'tags' => array(
       $validValue 
      ) 
); 


$collection->update(
    array(
     '_id' => new MongoId($id) 
    ), 
    array('$set' => $document), 
    array('upsert'=>true) 
); 

$validValue就像是 - 美孚酒吧

的第一個值變爲精細,但當我嘗試將不同的值,它將覆蓋的第一個?

+0

什麼是'$ id'?如果它是某種類型的自定義字符串而不是Mongoid,則不需要'new MongoId'。 – luckytaxi

+0

@luckytaxi my $ id is this - 5704fd6eb23eec37168b4567 – Kieron606

+0

什麼被覆蓋?你的第一個值是「Foo Bar」,你用「Hello World」更新它。你在期待什麼? – luckytaxi

回答

0

我設法弄清楚這個問題,我需要$addToSet,也需要採取數組()從角落找尋我$validValue

+0

不要添加自己的答案作爲你的問題的答案。 – luckytaxi

+0

@luckytaxi你試圖偷走我的答案。不要竊取答案,你的答案也行不通。 – Kieron606

+0

最好的部分是我提到我的代碼沒有經過測試,除了我之外,沒有其他人回答您的問題。我正在爲您研究解決方案,因此我已經在您的答案後提交了一些答案。祝你好運,從社區獲得未來的答案。我確定,因爲這不會幫助你。 – luckytaxi

1

事實上,使用$addToSet這不會推動一個值的數組,如果它已經存在。此代碼未經測試,請更改以符合您的需求。

$col = "A" . $user->agencyID; 
$db = $m->rules; 
$collection = $db->$col; 

$validValue = $_POST['validValue']; 
$id = $_POST['ruleID']; 

$document = array(
    'tags' => array(
      $validValue 
    ) 
); 


$collection->update(
    array(
     '_id' => new MongoId($id) 
    ), 
    array('$addToSet' => array('tags' => $document)) 
);