5

私はCasbahSalatを使用して独自のMongodbdaoを作成し、次のようなgetAllメソッドを実装しています。

val dao: SalatDAO[T, ObjectId]    
def getAll(): List[T] = dao.find(ref = MongoDBObject()).toList 

私が知りたいのは:

  1. すべてのオブジェクトを取得するためのより良い方法はありますか?
  2. オブジェクトを反復処理すると、オブジェクトの_idが見つかりません。除外されていますか?リストに含めるにはどうすればよいですか?
4

2 に答える 2

5

1°/ModelCompanion特性はdef findAll(): SalatMongoCursor[ObjectType] = dao.find(MongoDBObject.empty)方法を提供します。データベースにあるすべてのコレクションに対して専用のリクエストを実行する必要があります。

返されたオブジェクトを反復処理する場合は、 2回の反復を行うよりも、SalatMongoCursor[T]によって返されたオブジェクトを反復処理する方がよい場合があります(1つはfrom特性を使用し、もう1つはyourで)。dao.findtoListIteratorList[T]

2°/Salatは、_idキーをクラスIDフィールドにマップします。フィールドを使用してクラスを定義する場合id: ObjectId。このフィールドは、mongo_idキーでマップされます。Salatのドキュメント@Keyで指摘されているように、アノテーションを使用してこの動作を変更できます。

于 2012-07-09T08:59:57.497 に答える
1

私は次のようなものを実装しました:

MyDAO.ids(MongoDBObject("_id" -> MongoDBObject("$exists" -> true)))

これはすべてのIDをフェッチしますが、実行している可能性のあることの範囲が広いことを考えると、おそらくすべての状況に最適なソリューションではありません。現在、5つのデータレコードを使用して小さなシステムを構築しており、これを使用してMongoDBの動作を理解しています。

これが1,000,000エントリの本番データベースである場合、これ(または任意のgetAllクエリ)はばかげています。そうする代わりに、探している実際の結果を追跡するターゲットクエリを作成することを検討してください。

于 2012-07-25T04:07:51.673 に答える