2012-11-08 16 views
5

Uruchomiłem następujący kod i działa świetnie, jeśli nie istnieje rekord tworzy nowy. Próbuję zmodyfikować to zapytanie, aby pole "v" również zwiększało +1, ale nie mam szczęścia. Czy ktoś może mi pomóc?php mongodb - nie można uzyskać upsert pracy

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

Odpowiedz

6

Put zarówno $set i $inc w jednym obiekcie:

$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

że pracował, dzięki! – Joe

0

Można użyć liek $ inc Modyfikator:

{ $inc : { field : value } } 

Więc w twoim przypadku:

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

Widziałem tylko jesteś rzeczywiście użyciu pola chociaż powyższy przykład powinien praca.

Oto przykład w doc PHP: http://php.net/manual/en/mongocollection.update.php#example-1470

Powiązane problemy