1

请参考以下位置 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 中假定为“名称” PHP 致命错误:在 C:\php\seq 中未捕获异常“MongoResultException”,消息“需要删除或更新”。 php:10 堆栈跟踪:#0 C:\php\seq.php(10): MongoCollection->findAndModify(Array) #1 C:\php\seq.php(25): getNextSequence('userid') #2 { main} 在第 10 行的 C:\php\seq.php 中抛出

4

1 回答 1

2

您缺少变量$的a 。$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"];
}
于 2013-11-20T00:12:28.563 回答