MongoDB からドキュメントのリストを取得する REST API の任意のフィルターをサポートしようとしています。例えば
- //example.com/users <- すべてを一覧表示
- //example.com/users?age=30 <- 30 歳のすべてのユーザー
- //example.com/users?age=30&name=John <- 30 歳で John という名前のすべてのユーザー
- ...
私は Play-ReactiveMongo を使用しており、JSONCollection オブジェクトのみを扱っています。
だから私のルートで私は入れました
GET /users controllers.Users.list(id: Option[String], name: Option[String], age: Option[Int])
しかし、これには 2 つの問題があります。まず、オプションのパラメーターのかなり長いリストが必要です。次に、コントローラーで、それらすべてに対してパターン マッチングを使用して、それらが空かどうかを確認する必要があります。また、コレクションをフィルタリングするために使用するセレクターを作成します。
var filters = JsObject(Nil)
name match {
case Some(x) => filters += ("name" -> JsString(x))
case None => None
}
Map[String, Seq[String]] であるリクエスト オブジェクトから完全なクエリ文字列を取得できることに気付きました。しかし、値が文字列かどうかを確認する良い方法がわかりません。
私がやりたいことを行うための別のより良い慣用的な方法はありますか?