1

.getAscasbah には、 MongoDBObject で呼び出される 2 つのメソッドがあり、これは、型パラメーターとして指定された型で.getAsOrElse関連するフィールドの値を返します。

val dbo:MongoDBObject = ...
dbo.getAs[String](param)

これは型キャストを使用している必要があります。これは、型パラメーターLongとして aを指定することで a を取得できるためString、実行時に型キャスト例外が発生する可能性があるためです。結果で元の型を取得するタイプセーフな方法は他にありますか?

要素の型情報が の出力に存在する必要があるため、これは可能である必要がありgetAsます。

4

3 に答える 3

1

免責事項:私はサブセットの作成者であるため、偏見があります

この小さなライブラリ「サブセット」をDBObject作成したのは、タイプ セーフな方法で のフィールド (スカラーとサブドキュメントの両方) を効果的に操作できるようにするためです。を見て、ニーズに合っているかどうかを確認してください。

于 2012-07-09T18:40:52.410 に答える
1

Salatの著者によるこの優れたプレゼンテーションをご覧ください。あなたが探しているのは、DBObject との間で変換できる Salat です。grater

于 2012-07-09T16:24:19.390 に答える
0

問題は、mongodb が 1 つのフィールドに複数の型を格納できることです。そのため、このタイプセーフにする意味がわかりません。データベース側でそれを強制する方法がないので、casbah 側でそれを強制する方法があることを望んでいましたか? get("fieldName")最も安全であるためには、単に を実行して を取得することもできますがObject、私の意見では、それはほとんど改善にはなりません。

私は満足して Salat + Casbah を使用していますが、データベース レコードが Salat ケース クラスと一致しない場合、実行時例外が発生します。モデルのタイプを変更するとき、または新しいタイプの新しいモデルを作成するときに、移行スクリプトを実行する必要があることはわかっています (複数のモデルを同じコレクションに保存できます)。少なくとも Salat おろし金/DAO メソッドを使用すると、面倒が少なくなります (変数にアクセスするたびに型を指定する必要はありません)。

于 2012-07-09T14:12:52.813 に答える