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 を作成することを可能にする明らかな何かが欠けています!! ティア。

4

2 に答える 2

2

独自のタイプに基づいて更新を行うことができます! 型指定された Query および Update ビルダーを使用してみましたか?

次のようなことを試してください:

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 に答える