5

MongoDB C# ドライバーを使用していくつかの更新ステートメントを作成しています。C# APIBuilderには、名前空間にラップされたメソッドと「ラップされていない」メソッドの両方が含まれています。

表面的には、これらはジェネリックとBSONラッパーを使用する必要がないという点で異なっているように見えます。ただし、どちらのメソッド タイプでも、非 Bson-Wrapped パラメータを渡すことができます。2つの間に機能的な違いはありますか?

たとえば (ドライバ v1.2 を使用)、次の 2 つの用途があり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"));

これら2つの呼び出しの違いは何ですか? シンタックス シュガーのみの場合 - なぜラップ バージョンが必要なのですか?

4

1 に答える 1

5

文字列値を設定しても違いはありません。クラス、リストなどの複雑な型を扱う場合は、ラップされたメソッドが必要です (これは ではありませんBsonValue)。オブジェクトを BsonValue 型に正しく変換するだけです。

小さな例:

Set では、次のことはできません。

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

Wrapped メソッドまたは ToBsonDocument() エクステンションを使用する必要があります。

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

それでおしまい!

1 つの注意点として、ドライバーと mongodb に関するほとんどの部分はオープン ソースです。したがって、見るのは大したことではありません:)

于 2012-10-12T16:48:49.543 に答える