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
C# 为什么会抛出重复键错误,并且仍然插入值_C#_Mongodb_Uuid - Fatal编程技术网

C# 为什么会抛出重复键错误,并且仍然插入值

C# 为什么会抛出重复键错误,并且仍然插入值,c#,mongodb,uuid,C#,Mongodb,Uuid,使用c将文档插入到集合中# 通过 我们通过在文档中指定id来依赖guid/uuid的唯一性,这意味着mongo db驱动程序不必这样做 现在,所有这些都包装在一个try..catch中,其中捕获了重复的密钥异常。调用代码使用此例程进行冲突检查。也就是说,如果以前没有遇到过guid-插入它-下次尝试再次插入相同的值时,异常允许我们现在有一个重复的guid 我们似乎陷入了这样一种情况:写入了值,但仍然抛出了异常,这表明在没有异常的情况下存在冲突 我们已经在一个3节点的副本集中实现了这一点 它在5节点

使用c将文档插入到集合中#

通过

我们通过在文档中指定id来依赖guid/uuid的唯一性,这意味着mongo db驱动程序不必这样做

现在,所有这些都包装在一个try..catch中,其中捕获了重复的密钥异常。调用代码使用此例程进行冲突检查。也就是说,如果以前没有遇到过guid-插入它-下次尝试再次插入相同的值时,异常允许我们现在有一个重复的guid

我们似乎陷入了这样一种情况:写入了值,但仍然抛出了异常,这表明在没有异常的情况下存在冲突

我们已经在一个3节点的副本集中实现了这一点

它在5节点副本集中不起作用,据称是健康的。写入关注点设置为1,表示在写入主机(而不是日志)时确认,就像3节点集一样

我应该在哪里挖得更深?重复异常源于writeconcern异常,这里发生了什么异常吗?mongo驱动程序是否正确解释错误并引发正确的异常

任何线索都很好

编辑:

var-database=this.client.GetServer().GetDatabase(“A_数据库”);
var collection=database.GetCollection(“A_collection”);
尝试
{
插入(新的{Id=paymentReference.ToGuid()});
}
捕获(MongoDuplicateKeyException)
{
返回false;
}
返回true;

这不是在循环中调用。

这是您的代码的固定版本

    var database = this.client.GetServer().GetDatabase("A_Database");
    var collection = database.GetCollection<object>("A_Collection");

    try
    {
        collection.Insert(new { Id = paymentReference.ToGuid() });
    }
    catch (Exception)
    {
        collection.Insert(new { Id = Guid.NewGuid(); });
        return tru;
    }

    return true;
var-database=this.client.GetServer().GetDatabase(“A_数据库”);
var collection=database.GetCollection(“A_collection”);
尝试
{
插入(新的{Id=paymentReference.ToGuid()});
}
捕获(例外)
{
插入(新的{Id=Guid.NewGuid();});
返回tru;
}
返回true;

这是您的代码的固定版本

    var database = this.client.GetServer().GetDatabase("A_Database");
    var collection = database.GetCollection<object>("A_Collection");

    try
    {
        collection.Insert(new { Id = paymentReference.ToGuid() });
    }
    catch (Exception)
    {
        collection.Insert(new { Id = Guid.NewGuid(); });
        return tru;
    }

    return true;
var-database=this.client.GetServer().GetDatabase(“A_数据库”);
var collection=database.GetCollection(“A_collection”);
尝试
{
插入(新的{Id=paymentReference.ToGuid()});
}
捕获(例外)
{
插入(新的{Id=Guid.NewGuid();});
返回tru;
}
返回true;

Mongo 2.6.x。我相信c#驱动程序是最新的一个。你为什么不给我们看一下所谓的异常消息、类型、可能的内部异常..呃,我认为一个高级描述就足以激发一些人的知识或经验。MongoDuplicateKeyException。异常被吞并,通过insert方法返回false(表示重复)。原因可能被埋藏在原木中。即使知道如何检索这些信息也会很有帮助……此外,在你的脑海中,简单地围绕着我已经详细介绍过的插入,写一个try-catch,这主要是代码的总和……没有代码,没有答案。很明显,您在实际代码中做了一些事情,但这个问题没有做到这一点。“单个操作”也不可能导致“重复密钥错误”,也不可能写入数据库,因此必须有多个写入操作,而您将其误认为是单个操作。无论如何,问题中的注释和思考要少一些,而代码的直接示例实际上会在问题中产生错误。写它就像你在问坐在你旁边的人一样。Mongo 2.6.x。我相信c#驱动程序是最新的一个。你为什么不给我们看一下所谓的异常消息、类型、可能的内部异常..呃,我认为一个高级描述就足以激发一些人的知识或经验。MongoDuplicateKeyException。异常被吞并,通过insert方法返回false(表示重复)。原因可能被埋藏在原木中。即使知道如何检索这些信息也会很有帮助……此外,在你的脑海中,简单地围绕着我已经详细介绍过的插入,写一个try-catch,这主要是代码的总和……没有代码,没有答案。很明显,您在实际代码中做了一些事情,但这个问题没有做到这一点。“单个操作”也不可能导致“重复密钥错误”,也不可能写入数据库,因此必须有多个写入操作,而您将其误认为是单个操作。无论如何,问题中的注释和思考要少一些,而代码的直接示例实际上会在问题中产生错误。写它就像你在问坐在你旁边的人一样。谢谢你,伙计,但是,我认为你,像“布莱克斯”——如果你问我,他似乎有点精神错乱——很难理解我到底在说什么。此外,在返回tru(原文如此)时,您已经改变了例程的行为。这是故意的吗?事实上,这完全解决了我的问题。我真是个白痴。我不知道我在做什么。没有代码没有答案是我的新座右铭:)你是最好的。加油m8,当你升级2.NET6时,你会得到tru关键字。NET6,我甚至不知道这已经过时两年了。天啊,我真是落后了。布尔值中少一个字母似乎更好,我无法想象有多少个“e”可以节省我打字的时间。我不知道false是否也被缩短了?谢谢,伙计,不过,我想你,就像“布莱克斯”——如果你问我,他似乎有点神经错乱——很难理解我到底在说什么。此外,在返回tru(原文如此)时,您已经改变了例程的行为。这是故意的吗?事实上,这完全解决了我的问题。我真是个白痴。我不知道我在做什么。没有代码没有答案是我的新座右铭:)你是最好的。加油m8,当你升级2.NET6时,你会得到tru关键字。NET6,我甚至不知道这已经过时两年了。天哪,我真是落后了
        var database = this.client.GetServer().GetDatabase("A_Database");
        var collection = database.GetCollection<object>("A_Collection");

        try
        {
            collection.Insert(new { Id = paymentReference.ToGuid() });
        }
        catch (MongoDuplicateKeyException)
        {
            return false;
        }

        return true;
    var database = this.client.GetServer().GetDatabase("A_Database");
    var collection = database.GetCollection<object>("A_Collection");

    try
    {
        collection.Insert(new { Id = paymentReference.ToGuid() });
    }
    catch (Exception)
    {
        collection.Insert(new { Id = Guid.NewGuid(); });
        return tru;
    }

    return true;