2012-10-12 6 views
5

Ich baue einige Update-Anweisungen mit dem MongoDB C# Treiber. The C# API umfasst sowohl Wrapped und „Un-Wrapped“ Methoden im Builder Namespace.Verwenden des MongoDB C# -Treibers: Wrapped oder Un-Wrapped?

Auf der Oberfläche scheint es, daß diese durch Generika unterscheiden und keine BSON Wrapper zu verwenden. Beide Methodentypen ermöglichen es mir jedoch, einen Nicht-Bson-Wrapped-Parameter zu übergeben. Gibt es einen funktionalen Unterschied zwischen den beiden?

Zum Beispiel (mit Treiber v1.2), hier sind zwei Verwendungen von Update.Set:

var myCollection = database.GetCollection<MyObject>(typeof(MyObject).Name); 

myCollection.Update(
    Query.EQ("_id", myId), 
    Update.Set("Message", "My message text")); 

// And now the same call with "Wrapped" method 
myCollection.Update(
    Query.EQ("_id", myId), 
    Update.SetWrapped("Message", "My message text")); 

Was ist der Unterschied zwischen diesen beiden Anrufen? Wenn nur syntaktischer Zucker - warum die Notwendigkeit einer Wrapped-Version?

Antwort

5

Es gibt keinen Unterschied, wenn Sie einen String-Wert eingestellt. Wrapped-Methoden werden benötigt, wenn Sie mit komplexen Typen arbeiten: Klassen, Listen usw. (was nicht BsonValue ist). Sie konvertieren die Objekte nur korrekt in den BsonValue-Typ.

Kleines Beispiel:

Mit Set Sie folgendes tun:

var item = new MyDemo(); 
Update.Set("Item", item) 

Sie haben Wrapped Methode oder ToBsonDocument() Erweiterung verwenden:

var item = new MyDemo(); 
Update.SetWrapped("Item", item) 

Das ist es!

Ein Hinweis, der Fahrer und die meisten Stücke um mongodb sind Open Source. So ist es keine große Sache zu look at :)

+0

+1 für Open-Source-Erinnerung. Das vergesse ich immer. – SethO

Verwandte Themen