折り返しの際にリリーバを見つけることができませんでした.Getas() -- mongodb フィールド と scala フィールド と bson フィールド と reactivemongo フィールド 関連 問題

Reactive Mongo could not find reader when wrapping .getAs()












1
vote

問題

日本語

Reactive MongoのBSondocumentクラスで .getAs[T](String) メソッドをラップしようとしているので、私は名前だけでなくプロパティへのパスを与えることができます。これが私が思い付いたコードです:

<事前> <コード> def getPropertyFromBSONWithTransform[T1, T2](transform: T1 => T2, doc: BSONDocument, path: List[String]): Option[T2] = { def getPropertyFromBSON[T1](doc: Option[BSONDocument], path: List[String]): Option[T1] = doc match { case None => None case Some(d) => path match { case List() => error("Shouldnt be here") case s :: List() => d.getAs[T1](s) case x :: xs => getPropertyFromBSON[T1](d.getAs[BSONDocument](x), xs) } } val value = getPropertyFromBSON(Some(doc), path) value match { case None => None case Some(x) => Some(transform(x)) }

}

しかし、今は読者を持っていないことについて文句を言う。正確なエラー:

<事前> <コード> Error:(26, 40) could not find implicit value for parameter reader: reactivemongo.bson.BSONReader[_ <: reactivemongo.bson.BSONValue, T1] case s :: List() => d.getAs[T1](s) ^

これを1つのタイプに解決する方法を知っていますが、私はあなたが必要なすべてのタイプのためにそれを作る必要がないように、関数の一般的なものを保つことを望みます。私は読者をデータからできるだけ削除したいので、それを読むためにクラスを作ることはできません。

英語

I'm trying to wrap the .getAs[T](String) method in the BSONDocument class of Reactive Mongo so I can give a path to a property, instead of just the name. Here's the code I came up with:

def getPropertyFromBSONWithTransform[T1, T2](transform: T1 => T2, doc: BSONDocument, path: List[String]): Option[T2] = {  def getPropertyFromBSON[T1](doc: Option[BSONDocument], path: List[String]): Option[T1] = doc match {   case None => None   case Some(d) => path match {     case List() => error("Shouldnt be here")     case s :: List() => d.getAs[T1](s)     case x :: xs => getPropertyFromBSON[T1](d.getAs[BSONDocument](x), xs)   } }  val value = getPropertyFromBSON(Some(doc), path)  value match {   case None => None   case Some(x) => Some(transform(x)) } 

}

However, now it complains about not having a reader. Exact error:

Error:(26, 40) could not find implicit value for parameter reader: reactivemongo.bson.BSONReader[_ <: reactivemongo.bson.BSONValue, T1]     case s :: List() => d.getAs[T1](s)                                    ^ 

I know how to solve this for one type, but I want to keep the function generic so I don't have to make it for every type I need. Because I want to decouple the reader from the data as much as possible, I prefer not to make a class for it to read it to.

</div
           

回答リスト

0
 
vote

私は思います、あなたは暗黙的な読者をメインメソッドに合格するのを忘れました。これはうまくいくはずです。

<事前> <コード> def getPropertyFromBSONWithTransform[T1, T2](transform: T1 => T2, doc: BSONDocument, path: List[String])(implicit reader: BSONDocumentReader[T1]): Option[T2] = { def getPropertyFromBSON(doc: Option[BSONDocument], path: List[String]): Option[T1] = doc match { case None => None case Some(d) => path match { case List() => sys.error("Shouldnt be here") case s :: List() => d.getAs[T1](s) case x :: xs => getPropertyFromBSON(d.getAs[BSONDocument](x), xs) } } getPropertyFromBSON(Some(doc), path).map(transform) }
 

I think, you forgot to pass implicit reader to main method. This should be work.

def getPropertyFromBSONWithTransform[T1, T2](transform: T1 => T2, doc: BSONDocument, path: List[String])(implicit reader: BSONDocumentReader[T1]): Option[T2] = {     def getPropertyFromBSON(doc: Option[BSONDocument], path: List[String]): Option[T1] = doc match {      case None => None      case Some(d) => path match {        case List() => sys.error("Shouldnt be here")        case s :: List() => d.getAs[T1](s)        case x :: xs => getPropertyFromBSON(d.getAs[BSONDocument](x), xs)      }    }     getPropertyFromBSON(Some(doc), path).map(transform) } 
</div
 
 

関連する質問

1  RECOTIVEMONGO:いいえMongo-Async-Driver構成が見つかりました  ( Reactivemongo no mongo async driver configuration found ) 
ReactiveMongoで起動し、ログレベルが<コード> debug に設定されています。 ログに次の印刷を表示します。 <事前> <コード> application - ReactiveMongoApi starting... reactivemon...

2  Play2-ReactiveMongo。スカラ。 noneの更新オプションフィールドはエラーなしでは発生しません  ( Play2 reactivemongo scala update option field on none does not occur without e ) 
私はオプションフィールドを持つクラスMyClassを持っています(例えば、f:オプション[文字列])。私はその値でそれを更新します(例えば、いくつか( "abc"))とそれはwarksです。別の値で変更した場合(例えば、( "XYZ"))。しかし、私は今では更...

1  クエリによって一度に複数の文書を見つける方法  ( How to find several documents at once by querying ) 
リスト[文字列]に商品IDのリストがあります。 Mongoのリスト[JSObject]を、製品リスト内の各要素の1つのJSObjectを返したい。 私はたった1つの製品を取得するために次のものを持っています: <事前> <コード> def getIndivPr...

0  ScalaでMongoDBに接続します  ( Connecting to mongodb in scala ) 
Play Frameworkのドキュメントで見つけたReactiveMongo依存関係/ライブラリを介してPlay-ScalaアプリケーションをMongo DBに接続しようとしていました。 こののような私のconfファイルに追加しました <事前> <コード>...

5  Reactive MongoとPlayの「_ID」を介して '$ in' on 'on' on 'on' and 'and'を問い合わせる方法  ( How to query with in over id in reactive mongo and play ) 
playframework 2.2.0 および play2-reactivemongo 0.10.0-SNAPSHOT で設定されているプロジェクトがあります。これに似た方法で、自分のIDによる文書のほとんどを問い合わせたいと思います。 <事前> <コード...

0  ReactiveMongo - Value Connectionは、Object ReactiveMongo.api.mongodriverのメンバーではありません。  ( Reactivemongo value connection is not a member of object reactivemongo api mon ) 
Scala 2.11.8でReactiveMongo 0.12.7を使用しようとしていて、MongoDBに接続し、次のエラーが発生しました: <事前> <コード> value connection is not a member of object reac...

1  ReactiveMongo集計機能  ( Reactivemongo aggregate function ) 
次のMongoクエリを反応性Mongo換算(JSON)に変換しようとしています <事前> <コード> db.media.aggregate( {$group : { "_id" : "$createdBy", "count" : { $sum : 1 }}...

1  ReactiveMongo Aggregation Frameworkで$ MAP Aggregation Framework operatorを使用できますか?  ( Can i use the map aggregation framework operator in reactivemongo aggregation f ) 
Scala Reactive Mongoを使用して次の集約パイプラインを実装したいと思います。 <事前> <コード> aggregate([ { "$match": {"_id": ObjectId("5f22aca9b99533f2092b590c")...

0  ReactiveMongo 0.12 Application.confの問題とログ記録  ( Reactivemongo 0 12 application conf issue and logging issue ) 
私は私がそうすることができるすべてのものを読み、そしてReactiveMongoコミュニティリストと私は停止しています。私はReactiveMongoバージョン0.12を使用しています。他の問題があるため、それをテストしようとしています。 My Scala...

0  ReactiveMongoの範囲のクエリ  ( Query for ranges in reactivemongo ) 
ReactiveMongoを使用して範囲を問い合わせる方法。 に相当するもの <事前> <コード> db.collection.find( { field: { $gt: value1, $lt: value2 } } ); ありがとう。 ...




© 2022 cndgn.com All Rights Reserved. Q&Aハウス 全著作権所有