如何在php和mongodb中使用findAndModify

时间:2012-03-22 07:27:16

标签: php mongodb

我想将id递增1,但我在运行php页面时出现问题   错误是

Fatal error: Call to undefined method MongoCollection::findAndModify() in C:\wamp\www\....

我的代码是:

<?php
 // connect
 $m = new Mongo();
 $db=$m->demo;//selecting database named demo
 $db->authenticate("abc","abc");//authenticate database by its username and  password
 $next =nextValue($db);
 $db->counters.insert(array("_id"=>$next, "name"=>'B'));
 print_r($db->runcommand(array('getlasterror'=>1,'fsync'=>true)));
 function nextValue($db)
 {
      //$next =$db->counters->findAndModify(array('query'=> array("_id"=> "total"),'update'=>array($inc=> array("total"=> 1))));
      //I Used above Code Before this code
      $next =$db->command(array('findAndModify'=>'counters'),array('query'=> array("_id"=> "total"),'update'=>array($inc=> array("total"=> 1))));
      if($next['total']==0)
      {
         $db->counters->insert(array("_id"=> "total", "name" => 'A'));
         $next =$db->counters->findAndModify(array('query'=> array("_id"=> "total"),'update'=>array($inc=> array("total"=> 1))));
      }
      return $next['total'];
 }
?>

2 个答案:

答案 0 :(得分:4)

还没有findAndModify功能。而不是findAndModify,您必须运行通用数据库命令来执行此操作:

$db->command(
  array(
    "findandmodify" => "counters",
    "query" => array("_id"=> "total"),
    "update" => array($inc=> array("total"=> 1)),
  )
);

https://jira.mongodb.org/browse/PHP-117有一个未解决的问题,即实施findAndModify。

答案 1 :(得分:0)

使用findAndUpdate();

$collection = (new MongoDB\Client)->test->restaurants;

$updatedRestaurant = $collection->findOneAndUpdate(
    [ 'restaurant_id' => '40361708' ],
    [ '$set' => [ 'address.building' => '761' ]],
    [
        'projection' => [ 'address' => 1 ],
        'returnDocument' => MongoDB\Operation\FindOneAndUpdate::RETURN_DOCUMENT_AFTER,
    ]
);

var_dump($updatedRestaurant);