自动递增转换 - 我在这里错过了什么


Autoincrementing conversion - What am I missing here?

请参考以下位置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->findAndModify(Array) #1 C:''php''seq.php(25): getNextSequence('userid') #2 {主要} 在第 10 行的 C:''php''seq.php 中抛出

您缺少$name变量的$。此外,您传递给 findAndModify 帮助程序的参数是错误的,有关详细信息,请参阅 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"];
}