0

これが単純なものであることを願っていますが、オンラインの情報では、厳密に型指定されたモデルを使用しないとクエリを実行できないことが示されているため、そうなるかどうかはわかりません。

シナリオの背景を説明するために、モデルをローカル (ローカル ストレージ) に作成して保存するクライアント側の JavaScript アプリケーションがあります。ただし、承認されたユーザーを介してモデルを送信できる Web サービス (ASP MVC) があり、モデルを検証して永続化します。

ここでの問題は、クライアント側のアプリケーションが更新されると、モデルが変更される傾向があることです。データベース移行スクリプトのように考えてください。ただし、モデルが含まれます。ただし、それらにはすべてバージョンと移行スクリプトがあるため、システムは保存された (クライアント側) 古いモデルをロードし、最新バージョンに更新して再保存することができます。

したがって、クライアント側はさまざまなバージョン モデルを適切に処理し、mongodb/c# の質問がどこにあるのか疑問に思っていると思います。

サーバー側では、検証基準は常にその時点での最新バージョンのモデルに対して行われます。そのため、最新のクライアント側モデル バージョンが 2.3 の場合、サーバー側も同じであり、正しく検証されます。

この時点で、クライアント側のモデル @ バージョン 3.1 を保存すると、サーバーはバージョン 3.1 を検証して MongoDB に永続化します。それから 1 年間離れて、戻ってきたとき、クライアント側のバージョンは 5.1 でした。コンピューターをフォーマットしたため、ローカル データがなくなったので、ダウンロードに行きましたが、5.1 モデルは、バージョン 3.1。サーバーにはデータを移行する機能が備わっていませんが、データがデータベースに入力された時点でデータが有効であったことがわかっているため、データベース内の JSON をクライアントに送信できない理由はありません。メモリにロードされます (その後、クライアントに再保存されます)。現在、最新バージョン(5.1)を表すサーバーモデルにより、例外が発生するか、可能な限り入力して、モデルの残りの変数をデフォルトにするだけだと思います。

したがって、すべてのクエリは決して変更されないことがわかっている 2 つのフィールド (AccountId、PersistedId) に対して行われるため、厳密に型指定されたオブジェクトなしで MongoDB オブジェクトをクエリして、生の BSON ドキュメントを取得してから ToJson( を呼び出すことができない理由はわかりません。 ) をその BSON ドキュメントに追加し、クライアントに送り返します。強力な型を使用せずにデータを読み取る方法はありますか? したがって、書き込みを検証し、そこで厳密に型指定されたモデルを使用できますが、データを引き出すときに生の BSON をクエリしたいだけですか?

うまくいけば、これはたとえそれが長々としたものであっても、「なぜ強く型付けされたモデルを使用できないのか?」を避けるためにコンテキストを提供したかっただけです。等

4

1 に答える 1

1

したがって、未加工の BsonDocuments を使用してクエリを実行できます。これらは型指定されていませんが、型付きモデルを使用して作成できます。多分これは妥協ですか?

var queryDocument = Query<Person>.Eq(p => p.Name, "Jack");
// { "name" : "Jack" }

それ以外の場合、バージョンをこのように動作させたい場合、スキーマの移行を処理するための魔法の弾丸はありません。これは、すべてのデータベース スタックにまたがる問題です。シリアライゼーション チュートリアルに、これを扱うためのドキュメントがいくつかあります。

于 2012-12-17T15:26:13.947 に答える