未捕获的错误:调用未定义的方法MongoDB \\ Collection :: update()

时间:2019-07-11 01:44:59

标签: php mongodb

我更新了一个环境。我升级了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');
    }
}

1 个答案:

答案 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