我正在使用MongoDB C#驱动程序构建一些更新语句。 The 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"));
这两个电话有什么区别?如果只是语法糖 - 为什么需要一个Wrapped版本?
答案 0 :(得分:5)
设置字符串值没有区别。使用复杂类型时需要使用包装的方法:类,列表等(不是BsonValue
)。他们只是正确地将对象转换为BsonValue类型。
小例子:
使用Set,您无法执行以下操作:
var item = new MyDemo();
Update.Set("Item", item)
您必须使用Wrapped方法或ToBsonDocument()扩展名:
var item = new MyDemo();
Update.SetWrapped("Item", item)
就是这样!
一个注意事项,mongodb周围的驱动程序和大多数部分都是开源的。所以look at :)
并不是什么大问题