2012-11-08 74 views
5

我正在運行下面的代碼,它運作良好,如果沒有記錄存在,它會創建一個新的。我試圖做的是修改這個查詢,以便'v'字段也增加+1,但我沒有任何運氣。有人可以幫我嗎?php mongodb - 無法獲得upsert工作

  $result = $collection->update(
       array('k'=>md5(SITE_ID.'-'.$_SERVER['HTTP_X_FORWARDED_FOR'])), 
       array('$set'=> 
        array(
         'k'=>md5(SITE_ID.'-'.$_SERVER['HTTP_X_FORWARDED_FOR']),                 'st'=>SITE_ID, 
         'ur'=>$_GET['u'],             
         'ts'=>time(), 
         'dt'=>date('Ymd'), 
         'ur'=>$_GET['p'], 
         'v'=>1 
        ), 
        array(
         '$inc' => array('v' => 1) 
        ), 
       ), 
       array('upsert'=>true) 
      ); 

回答

6

把兩隻在$set和單個對象的$inc

$result = $collection->update(
    array('k'=>md5(SITE_ID.'-'.$_SERVER['HTTP_X_FORWARDED_FOR'])), 
    array(
     '$set'=> array(
       'k'=>md5(SITE_ID.'-'.$_SERVER['HTTP_X_FORWARDED_FOR']),                 'st'=>SITE_ID, 
       'ur'=>$_GET['u'],             
       'ts'=>time(), 
       'dt'=>date('Ymd'), 
       'ur'=>$_GET['p'] 
      ), 
     '$inc' => array('v' => 1) 
    ), 
    array('upsert'=>true) 
); 
+0

奏效,謝謝! – Joe

0

你可以用$ INC修改liek:

{ $inc : { field : value } } 

所以你的情況:

$result = $collection->update(
    array('k'=>md5(SITE_ID.'-'.$_SERVER['HTTP_X_FORWARDED_FOR'])), 
    array('$set'=> 
     array(
      'k'=>md5(SITE_ID.'-'.$_SERVER['HTTP_X_FORWARDED_FOR']),                 'st'=>SITE_ID, 
      'ur'=>$_GET['u'],             
      'ts'=>time(), 
      'dt'=>date('Ymd'), 
      'ur'=>$_GET['p'], 
      array('$inc' => array('v' => 1)) 
     ), 
    ), 
    array('upsert'=>true) 
); 

我剛纔看到你實際使用領域雖然上面的例子應該工作。

這裏有一個例子在PHP文檔:http://php.net/manual/en/mongocollection.update.php#example-1470