2013-08-14 6 views
0

안녕하세요, mongoDB 2 개체에 삽입하려고합니다. 잘 작동 내가 1 개체를 삽입 할 때 ,mongo 2 오브젝트에 삽입

private void Query<TO>(TO o) 
{ 
    const string connectionString = "mongodb://localhost"; 
    var client = new MongoClient(connectionString); 
    var server = client.GetServer(); 
    var database = server.GetDatabase("test"); 
    var collection = database.GetCollection<TO>(o.GetType().Name + "s"); 
    collection.Insert(o); 
} 

하지만 2 개체를 삽입하려고하면 BSON 드라이버가 오류를 슬로우하는

private void Query<TO, TK, TV>(TO o, Dictionary<TK, TV> ExtraFields) 
{ 
    const string connectionString = "mongodb://localhost"; 
    var client = new MongoClient(connectionString); 
    var server = client.GetServer(); 
    var database = server.GetDatabase("test"); 
    var collection = database.GetCollection<Object[]>(o.GetType().Name + "s"); 
    collection.Insert(new List<object> 
    { 
     o, 
     ExtraFields 
    }); 
} 

내가 오류가

입니다 { "Serializer EnumerableSerializer는 ArraySerializationOptions 유형의 옵션이 아닌 DocumentSerializationOptions입니다."}

감사

+0

대신'collection.InsertBatch()'를 사용해 보셨습니까? –

+0

Insert로 삽입하지 않고 [InsertBatch] (http://docs.mongodb.org/ecosystem/tutorial/use-csharp-driver/#insertbatch-method)를 사용해야합니다. 반면에 Insert는 단일 개체를 열거 할 수 없지만 InsertBatch는 열거 형을 허용합니다. –

+0

예, 다른 오류가 발생했습니다. { "Serializer DictionarySerializer DocumentSerializationOptions가 아닌 DictionarySerializationOptions 유형의 예상 직렬화 옵션입니다."} – user1264626

답변

0

귀하의 수집 유형은 클래스가 될 필요가 있고 배열이나 모음을 할 수 없습니다. "2 개체"를 하나의 문서로 취급하거나 별도의 항목으로 삽입하려는 경우 확실하지 않습니다. 클래스를 생성하거나 BsonDocument를 직접 빌드하고 저장하는 클래스를 만들어야합니다. 당신이하는 것처럼 제네릭을 사용할 수 있다고 생각하지 않습니다. 다음과 같이 입력하십시오 :

public class ObjectWithExtraFields { 
    public Type1 O { get; set; }   
    public Dictionary<string, Type2> ExtraFields { get; set; } 
} 

var collection = database.GetCollection<ObjectWithExtraFields>(o.GetType().Name + "s"); 
collection.Insert(new ObjectWithExtraFields {  
    O = o, 
    ExtraFields = ExtraFields 
}); 
관련 문제