1

我正在尝试使用强类型对象执行更新。例如,

public void setAppointmentPrefs(string UserName, IEnumerable<AppointmentInfo> info)
{
    var query = new QueryDocument {{ "ProviderId", UserName}};
    var update = Update.Set("Prefs",prefs);    // prefs.toList() gives same error
    // providerprefs initialized in constructor
    providerprefs.Update(query, update);
}

我收到一个编译器错误说:Error 14 The best overloaded method match for 'MongoDB.Driver.Builders.Update.Set(string, MongoDB.Bson.BsonValue)' has some invalid arguments

显然 Mongo 驱动程序不会让我根据我自己的对象(无论是 IEnumerable 还是 prefs.toList())进行更新,这似乎与它允许我插入或查询自定义对象的方式形成对比。当然,我遗漏了一些明显的东西,可以让我避免反序列化、弱输入然后创建通用 BsonDocument!TIA。

4

2 回答 2

2

您可以根据自己的类型进行更新!您是否尝试过使用类型化的查询和更新构建器?

尝试这样的事情:

var query = Query<AppointmentInfo>.EQ(i => i.ProviderId, userName);
var update = Update<AppointmentInfo>.Set(i => i.Prefs, info.Prefs);

不确定我是否从您的部分代码中获得了类型和所有内容,但这应该会给您一个大致的想法。

如果您还有其他问题,请告诉我。

于 2012-09-10T20:58:17.567 回答
1

我知道这已经得到解答,但我个人并不完全理解罗伯茨的回答。

我所做的只是调用“ToBsonDocument()”方法,将对象作为参数除外

所以:

customObject.ToBsonDocument()

如果文档中有一组对象:

var query = Query.EQ("_id", ObjectId.Parse(id.ToString()));
var update = Update.Push("ArrayOfObjects", customObject.ToBsonDocument());
collection.Update(query, update);
于 2013-03-14T13:20:21.343 回答