mongodb を使用し、スタックの一部を scala で書き換えています。mophia を使い続けるか、サブセットなどの scala mongodb ライブラリを使用するかを考えています。
質問は、サブセットから何が得られるかです。たとえば、mophia では、サブセットで行う必要があるように、mongodb フィールド名を手動で定義する必要はありません...
サブセットは本当に使う価値がありますか?
私はSubsetの作者です。「サブセット」は、実際には一種の ORM ライブラリではないと思います。データベースとコレクションを操作するメソッドはなく、Java/Scala ドライバーに任せています。ただし、MongoDB ドキュメントの変換に重点を置いています。この変換コアはかなり一般的で、フィールドの読み取り/書き込みだけでなく、ドキュメントの移行などを実行する必要があるアプリケーションにも適しています。サブセットが提供するクエリ/更新ビルダーは、この「コア」の上に構築されます。
そうは言っても、ORM が必要な場合は、実際にはもっと簡単な代替手段があります。Subset が真の ORM ライブラリと競合するつもりはありませんでした。自分のプロジェクトで出会ったギャップを埋めてきました。
ORM-Mapper/Client-Libraries に加えて、Rougeを試してみることをお勧めします。Mongo 用の優れたクエリ DSL を提供します。Rogue 1.X はLift-MongoDBのみをサポートしますが、バージョン 2.x (近い将来出荷予定) は、より多くの MongoDB ライブラリで動作します。
サンプル クエリは次のようになります (コンパイル時の型チェックを使用した純粋な Scala コード)。
Venue where (_.mayor eqs 1234) and (_.categories contains "Thai") fetch(10)
これは、Venue コレクション内の 1234 が市長で、Thai がそのカテゴリの 1 つである 10 個のエントリをクエリします。
Scalaでは、 Casbahの使用を検討する必要があります。Casbah は、Java ドライバー上に構築された MongoDB で公式にサポートされているインターフェイスです。
Casbah のアプローチは、MongoDB の上に流動的で Scala に適した構文を追加し、一般的な型の変換を処理することを目的としています。Scala List または Seq を MongoDB に保存しようとすると、Java ドライバーがシリアル化できる型に自動的に変換されます。Java 型を読み取る場合、コードにヒットする前に、同等の Scala 型に変換します。これはすべて、Scala イディオムを使用して可能な限り最高の Scala コードを書くことに集中できるようにすることを目的としています。MongoDB のパワーと柔軟性を備えた、Scala に期待される機能的で暗黙的な変換ツールを提供するために多大な努力が払われています。
Casbah は、GridFS、Map/Reduce、およびコア Mongo API への改善されたインターフェースを提供します。また、内部 DSL をエミュレートする流動的なクエリ構文を提供し、JS シェルで記述したようなコードを記述できるようにします。また、一般的なデータ型の新しいシリアライゼーション/デシリアライゼーション メカニズムを簡単に追加するためのサポートもあります。