我正在运行以下代码并且它运行良好,如果不存在记录,则会创建一个新代码。我要做的是修改这个查询,以便'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)
);
答案 0 :(得分: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)
);
答案 1 :(得分: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