使用MongoDB C#驱动程序:已包装还是未包装?

使用MongoDB C#驱动程序:已包装还是未包装?,c#,mongodb,C#,Mongodb,我正在使用MongoDB C#驱动程序构建一些更新语句。在Builder命名空间中同时包含Wrapped和“unwrapped”方法 表面上看,它们似乎因泛型不同而不同,并且不必使用包装器。但是,这两种方法类型都允许传入非Bson包装的参数。两者之间有功能上的区别吗 例如(使用驱动程序v1.2),这里有两种Update.Set: var myCollection=database.GetCollection(typeof(MyObject.Name)); myCollection.Update(

我正在使用MongoDB C#驱动程序构建一些更新语句。在
Builder
命名空间中同时包含Wrapped和“unwrapped”方法

表面上看,它们似乎因泛型不同而不同,并且不必使用包装器。但是,这两种方法类型都允许传入非Bson包装的参数。两者之间有功能上的区别吗

例如(使用驱动程序v1.2),这里有两种
Update.Set

var myCollection=database.GetCollection(typeof(MyObject.Name));
myCollection.Update(
Query.EQ(“\u id”,myId),
Update.Set(“消息”、“我的消息文本”);
//现在使用“Wrapped”方法进行相同的调用
myCollection.Update(
Query.EQ(“\u id”,myId),
Update.SetWrapped(“消息”、“我的消息文本”);

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

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

小例子:

使用Set,您不能执行以下操作:

var item = new MyDemo();
Update.Set("Item", item)
您必须使用Wrapped方法或ToBsonDocument()扩展名:

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

需要注意的是,驱动程序和mongodb周围的大多数部分都是开源的。所以说:)没什么大不了的