2017-03-05 8 views
1

私は以下の2つの機能を持っています。 InsertOne()関数は正常に動作し、BsonDocumentは新しく作成された_idで更新されます。ただし、InsertMany()関数はオブジェクトIDを返していません。私はコードをデバッグし、個々のドキュメントは_idフィールドで更新されませんでした。C#MongoDB InsertMany missing _id insert after

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(); 
    } 

EDIT - これはバグであるかどうかわからないが、私は代わりにIEnumerableを、InsertMany(のリストを使用する場合、私はちょうど実現)期待通りに動作します。

答えて

0

これはLINQでIEnumerableのコレクションを作成する方法と関係があります。 MongoCollection.InsertManyは、フードの下でコレクションを列挙し、_idを入力することによって、コレクションを具体化します。しかし、それは新しいコレクションであり、あなたが最初に渡したのはIEnumerableではありません。そのため、IDはありません。 Listを渡した場合、コレクションはすでにマテリアライズされているため、コレクション内のフィールドに値が設定されます。

関連する問題