自动增量转换 - 我在这里缺少什么?

时间:2013-10-30 16:42:24

标签: php mongodb

请参阅以下位置 http://docs.mongodb.org/manual/tutorial/create-an-auto-incrementing-field/

在指定的URL(上面)中,有一个示例代码用于java脚本中的自动增量逻辑,它已转换为php(我已经提供了下面的代码) - 我无法使其无错误。任何人都可以纠正我在转换中出错的地方吗?

<?php
function getNextSequence($name) {
global $db;
   $ret = $db->counters->findAndModify(
          array(
            'query'=>array( '_id'=>name),
            'update'=>array( '$inc'=> 

array('seq'=> 1) ),
            'new'=>'true'
          )
   );
   return $ret->seq;
}

$db = new MongoClient();
$db = $db->test;

$db->counters->insert(
array(
    '_id'=>"userid",
     'seq'=>0
      )
);
$db->users->insert(
   array(
     '_id'=> getNextSequence("userid"),
     'name'=> "Sarah C."
   )
);

$db->users->insert(
   array(
     '_id'=> getNextSequence("userid"),
     'name'=> "Bob D."
   )
);
$ret = $db->users->find();
print_r($ret);
?>

PHP注意:使用未定义的常量名称 - 在第6行的C:\ php \ seq.php中假定为'name' PHP致命错误:未捕获的异常'MongoResultException',消息'需要删除或更新'在C:\ php \ seq.php中:10 堆栈跟踪:     #0 C:\ php \ seq.php(10):MongoCollection-&gt; findAndModify(Array)     #1 C:\ php \ seq.php(25):getNextSequence('userid')     #2 {main}     在第10行的C:\ php \ seq.php中抛出

1 个答案:

答案 0 :(得分:2)

您错过$变量的$name。 此外,您传递给findAndModify助手的参数是inccrect,有关详细信息,请参阅http://us1.php.net/mongocollection.findandmodify

脚本的正确getNextSequence()应为:

<?php
function getNextSequence($name) {
    global $db;

    $ret = $db->counters->findAndModify(
        array( '_id' => $name),
        array('$inc' => array('seq' => 1)),
        array(),
        array('new' => true)
    );
    return $ret["seq"];
}