2017-03-05 2 views
1

그래서 두 가지 기능이 있습니다. InsertOne() 함수는 잘 작동하며 BsonDocument는 새로 만든 _id로 업데이트됩니다. 그러나 InsertMany() 함수는 개체 ID를 반환하지 않습니다. 코드를 디버깅했으며 개별 문서 중 어느 것도 _id 필드로 업데이트되지 않았습니다.삽입 후 C# MongoDB InsertMany missing _id

InsertMany() 함수는 문서를 데이터베이스에 삽입하기 때문에 Mongo 셸의 개체 ID를 모두 볼 수 있습니다.

내 코드의 모델에는 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을 전달하면 컬렉션이 이미 구체화되어 필드가 채워집니다.

관련 문제