2012-11-08 32 views
5

Aşağıdaki kodu çalıştırıyorum ve harika çalışıyor, kayıt yoksa yeni bir tane oluşturuyor. Yapmaya çalıştığım şey, bu sorguyu 'v' alanı da + 1'i artıracak şekilde değiştirmektir, ancak hiç şansım yok. Birisi bana yardım edebilir mi?php mongodb - çalışmaz alamıyor

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

cevap

6

hem $set ve tek bir nesne içinde $inc Put:

$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

çalıştı, teşekkürler! – Joe

0

Sen $ inc değiştirici liek kullanabilirsiniz: Yani sizin durumda

{ $inc : { field : value } } 

: Sadece gerçekten alanını kullanarak konum gördü

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

Yukarıdaki örnek rağmen gerektiği iş.

Burada PHP doc bir örnek: http://php.net/manual/en/mongocollection.update.php#example-1470