Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/237.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php upsert期间出现重复键错误[解释]_Php_Mongodb_Key_Duplicates_Upsert - Fatal编程技术网

Php upsert期间出现重复键错误[解释]

Php upsert期间出现重复键错误[解释],php,mongodb,key,duplicates,upsert,Php,Mongodb,Key,Duplicates,Upsert,我正在一个类中执行下面的语句。此代码来自 $query = array('_id' => $id, 'lock' => 0); $update = array('$set' => array('lock' => 1)); $options = array('safe' => true, 'upsert' => true); $result = $this->_mongo->update($query, $update, $options); i

我正在一个类中执行下面的语句。此代码来自

$query  = array('_id' => $id, 'lock' => 0);
$update = array('$set' => array('lock' => 1));
$options = array('safe' => true, 'upsert' => true);
$result = $this->_mongo->update($query, $update, $options);

if ($result['ok'] == 1) {
    return true; 
}
然而,我不明白我将如何得到一个重复的关键错误。 有人能解释一下可能出现的情况以及我收到这个错误的可能性吗

我已经对此进行了广泛的研究,在任何地方都找不到我的答案。因此,如果是在So或任何其他网站上,请分享


提前感谢。

因为您正在进行upsert,并且在查询中包含了
\u id
,所以您不应该在该键上获得任何重复项。这让我觉得您已经在
lock
上创建了一个唯一的索引,它不适用于超过2个文档,因为该字段只有2个值


若您并没有在锁上放置唯一索引,那个么您必须在这里并没有显示的字段上具有唯一索引。这也行不通,因为在插入时,您的upsert将只设置
\u id
,带有索引的任何其他字段将被插入为
null
。如果其中一个字段具有唯一索引,则该字段中只能有一个
null
。因此,当您尝试为该字段插入另一个
null
时,您将得到一个重复的密钥错误。

您解决了这个问题吗Jesse?