2017-03-05 65 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該集合已經實現,所以它只填充它中的字段。