2017-03-05 78 views
1

所以我有两个函数,如下所示。 InsertOne()函数工作正常,BsonDocument用新创建的_id更新。但是,InsertMany()函数不返回对象标识。我调试了代码,没有一个单独的文档用_id字段进行更新。C#MongoDB InsertMany插入后缺少_id

InsertMany()函数确实将文档插入到数据库中,我可以看到它们都具有来自Mongo shell的对象标识符。

我的代码中的模型没有Id字段。他们正在使用像MyModel.ToBsonDocument()这样的代码进行转换。

我是否错过了某些东西以获取批量插入生成的ID?

public string InsertOne(BsonDocument document) 
    { 
     MongoCollection.InsertOne(document); 
     return document["_id"].ToString(); 
    } 

    public string[] InsertMany(IEnumerable<BsonDocument> documents) 
    { 
     MongoCollection.InsertMany(documents); 
     return documents.Select(item => Convert.ToString(item["_id"])).ToArray(); 
    } 

编辑 - 不知道这是一个错误,但如果我用一个列表,而不是IEnumerable的,在InsertMany()按预期工作我才意识到。

回答

0

它与LINQ中IEnumerable我们创建集合的方式有关。 MongoCollection.InsertMany通过列举并引用_id来实现引擎盖下的集合。然而,这是一个新的集合,它不是您最初传入的IEnumerable,这就是为什么它没有ID。如果您通过List该集合已经实现,所以它只填充它中的字段。