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?