我更新了一个环境。我升级了PHP和Mongo。代码使用的是旧版驱动程序,但是现在我使用的是mongodb。我也在使用mongo-php-library。该代码段现已损坏,我不确定如何修复。我已经读过有关updateOne和replaceOne的信息,但是我不确定如何使用它:
function update($collection,$criteria,$data,$insertIfNotExists = false)
{
if (!isset($this->collection[$collection])) {
$this->collection[$collection] = self::$database->selectCollection($collection);
}
if ($insertIfNotExists) {
$oldData = $this->collection[$collection]->findOne($criteria);
if ($oldData == NULL) {
$data['createdDate'] = date("Y-m-d H:i:s");
$data['modifiedDate'] = (isset($data['modifiedDate'])) ? $data['modifiedDate']:date("Y-m-d H:i:s");
return ($this->collection[$collection]->insert($data)) ? array('status'=>'ok'):array('status'=>'error','error'=>'unknown_error');
} else {
$newData = $oldData;
foreach($data as $n=>$v) {
$newData[$n] = $v;
}
$newData['modifiedDate'] = (isset($newData['modifiedDate'])) ? $newData['modifiedDate']:date("Y-m-d H:i:s");
return ($this->collection[$collection]->update($criteria,$newData)) ? array('status'=>'ok'):array('status'=>'error','error'=>'unknown_error');
}
} else {
return ($this->collection[$collection]->update($criteria,$data)) ? array('status'=>'ok'):array('status'=>'error','error'=>'unknown_error');
}
}
答案 0 :(得分:1)
新驱动程序更改了某些方法的名称。现在您有了update()
和updateOne()
,而不是updateMany()
(曾经用来更新一个或多个文档)。其他遗留方法insert()
和remove()
也是如此。您可以在PHP MongoDB's Extension Docs 和MongoDB PHP Library中获得有关这些更改所需的所有更多信息。
因此,只需更改以下代码即可解决该错误:
$this->collection[$collection]->updateOne($criteria,$data)
修改
看来您只需要更新字段modifiedDate
,就可以执行以下操作:
$criteria = ['number' => '999'];
$newData = ['modifiedDate' => '2019-07-11 03:00:00'];
$this->collection[$collection]->updateOne(
$criteria,
'$set' => $newData
);
此处有更多信息:Update One Document