5

私は次のコードを実行していますが、レコードが存在しない場合は新しいレコードを作成します。私がやろうとしているのは、このクエリを変更して、「v」フィールドも+1増加するようにすることですが、運がありません。誰かが私を助けることができますか?

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

2 に答える 2

5

$setとの両方$incを1つのオブジェクトに入れます。

$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)
);
于 2012-11-08T21:59:34.190 に答える
0

$inc修飾子のようなものを使用できます。

{ $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

于 2012-11-08T21:51:34.947 に答える