5

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

从表面上看,这些似乎因泛型不同而不必使用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 版本?

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)

就是这样!

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

于 2012-10-12T16:48:49.543 回答