2013-02-04 43 views
0

我想更新的MongoDB 這裏我的子陣是什麼MongoDB的集合看起來像PHP更新MongoDB的子陣列

array (
     '_id' => new MongoId("510fb81638fc5d2966000000"), 
     'items' => 
     array (
     '0' => 
     array (
      'id' => '510bb69538fc5d0c2d000000', 
      'quantity' => '1', 
     ), 
     '1' => 
     array (
      'id' => '510bca8138fc5d6e38000000', 
      'quantity' => '1', 
     ), 
    ), 
     'session' => '1359964785.85203874781', 
     'status' => 'cart' 
) 

我創造了我的形式發送以下

然而

當我嘗試$設置爲蒙戈

$filter = array('session' => $_SESSION["redi-Shop"]); 
$data2 = array(
       '$set' => array($_POST['items']) 
      ); 
$options = array("upsert" => true); 
$collection->update($filter, $data2, $options); 

諾斯ING似乎更新

+0

張貼重複將不會得到您的答案更快:http://stackoverflow.com/questions/14687113/mongodb-does-not-seem-to-want-to-push-to-array完成其他第一 – Sammaye

+0

不是重複問題如果你讀到這個問題,這個問題完全不同,因爲這個問題被插入到一個子數組中,這是更新子數組 - 可能看起來相同但非常不同 – RussellHarrower

回答

0

正如Sammaye所說,你忽略了你的查詢。而且,你想更新,替換還是推送到數組?

更換所有物品:

$data2 = array('$set' => array('items' => array($_POST['items']))); 
$collection->update(array('session' => $_SESSION["redi-Shop"]), $data2, array("upsert" => true)); 

更新項目的第一陣列:

$data2 = array('$set' => array('items.0' => $_POST['items'])); 
$collection->update(array('session' => $_SESSION["redi-Shop"]), $data2, array("upsert" => true)); 

並以的物品數組:

$data2 = array('$push' => array('items' => $_POST['items'])); 
$collection->update(array('session' => $_SESSION["redi-Shop"]), $data2, array("upsert" => true)); 
1

你的設定有錯:

$filter = array('session' => $_SESSION["redi-Shop"]); 
$data2 = array('$set' =>array('items' => array($_POST['items']))); 

$options = array("upsert" => true); 
$collection->update($filter, $data2, $options); 

我應該提到這樣使用$_POST需要的一些一個破解您的購物網站。

+0

+1對於***輕微***缺少這種方法的安全性 – mnemosyn