【问题标题】:Duplicate key error during upsert [Explanation]upsert 期间出现重复键错误 [解释]
【发布时间】:2012-01-10 01:17:15
【问题描述】:

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

$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 或任何其他网站上,请分享!

提前致谢。

【问题讨论】:

  • 杰西解决了这个问题吗?

标签: php mongodb key duplicates upsert


【解决方案1】:

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

如果您没有在锁上设置唯一索引,那么您必须在此处未显示的字段上设置唯一索引。这也不起作用,因为在插入时,您的 upsert 将仅设置 _idlock,任何其他具有索引的字段都将插入为 null。如果其中一个字段具有唯一索引,则只有单个文档在该字段中可以有 null。因此,当您尝试为该字段插入另一个 null 时,您将收到重复键错误。

【讨论】:

    猜你喜欢
    • 2013-08-09
    • 2016-09-14
    • 2018-03-04
    • 2018-08-17
    • 1970-01-01
    • 2016-02-05
    • 1970-01-01
    • 2018-07-08
    相关资源
    最近更新 更多