使用MongoDB C#驱动程序:Wrapped还是Un-Wrapped?

Set*_*thO 5 c# mongodb

我正在使用MongoDB C#驱动程序构建一些更新语句.C#API包括Builder命名空间中的Wrapped和"Un-Wrapped"方法.

从表面上看,它们似乎因泛型不同而不必使用BSON包装.但是,两种方法类型都允许我传入非Bson-Wrapped参数.这两者之间是否存在功能差异?

例如(使用驱动程序v1.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"));
Run Code Online (Sandbox Code Playgroud)

这两个电话有什么区别?如果只是语法糖 - 为什么需要一个Wrapped版本?

And*_*ich 5

设置字符串值没有区别.使用复杂类型时需要使用包装方法:类,列表等(不是BsonValue).他们只是正确地将对象转换为BsonValue类型.

小例子:

使用Set,您无法执行以下操作:

var item = new MyDemo();
Update.Set("Item", item)
Run Code Online (Sandbox Code Playgroud)

您必须使用Wrapped方法或ToBsonDocument()扩展:

var item = new MyDemo();
Update.SetWrapped("Item", item)
Run Code Online (Sandbox Code Playgroud)

而已!

一个注意事项,mongodb周围的驱动程序和大多数部分都是开源的.所以看看 :) 没什么大不了的