在 mongo 中插入文档时出现 E11000 重复键错误集合

时间:2021-03-05 20:20:16

标签: c# mongodb

 var doc = new BsonDocument();
  documentRepository.AddDocument(doc, "myCollection").GetAwaiter().GetResult();
  
  public async Task<string> AddDocument(BsonDocument item, string collection)
  {
     await _database.GetCollection<BsonDocument>(collection).InsertOneAsync(item);
     return item["_id"].ToString(); // this is where exception happens
  }     
<块引用>

E11000 重复键错误集合:myApp.myCollection 索引: id dup key: { _id: ObjectId('12381e2b09f14f0001fead43') } MongoDB.Driver.MongoWriteException:写入操作导致 错误。

E11000 duplicate key error collection: myApp.myCollection index: _id_ dup key: { _id: ObjectId('12381e2b09f14f0001fead43') }
    ---> MongoDB.Driver.MongoBulkWriteException`1[MongoDB.Bson.BsonDocument]: A bulk write operation resulted in one or more errors.
    
    E11000 duplicate key error collection: myApp.myCollection index: _id_ dup key: { _id: ObjectId('12381e2b09f14f0001fead43') }
    at MongoDB.Driver.MongoCollectionImpl`1.BulkWriteAsync(IClientSessionHandle session, IEnumerable`1 requests, BulkWriteOptions options, CancellationToken cancellationToken)
    at MongoDB.Driver.MongoCollectionImpl`1.UsingImplicitSessionAsync[TResult](Func`2 funcAsync, CancellationToken cancellationToken)
    at MongoDB.Driver.MongoCollectionBase`1.InsertOneAsync(TDocument document, InsertOneOptions options, Func`3 bulkWriteAsync)

混乱来自于异常消息说我正在尝试执行批量插入

MongoDB.Driver.MongoBulkWriteException`1[MongoDB.Bson.BsonDocument]

如您所见,我是否只插入了一个文档

1 个答案:

答案 0 :(得分:1)

发生此异常是因为您试图在集合中使用重复的 _id 值(您可以使用 mongo shell 进行检查)。上面的代码本身不会触发这个错误,但是如果你调用 AddDocument 两次或更多次就会发生这个错误。注意,在第一次 AddDocument 调用后,item 文档将填充 _id 值,因此在下次尝试使用此对象时,驱动程序将尝试插入具有重复值的文档< /p>