2016-06-13 9 views
0

私はPlay 2.5.4とReactiveMongoを使用してPlay/Scalaアプリケーションを作成しています。 this exampleに基づいて、私はReactiveMongoでコレクションを取得する慣習的な方法

class SettingStore(val mongo:ReactiveMongoApi) { 
    def collection = mongo.db.collection[BSONCollection]("Settings") 
    // more code... 
} 

がしかし、dbが廃止されて使用してコレクションを取得しています。非推奨警告ではdatabaseを使用することをお勧めしますが、この操作はすべてFutureを返します。すべての操作をマップする必要があります。 ReactiveMongoの操作もFutureを返すので、これは冗長なようです...コレクションを取得する適切な方法は何ですか? (または、私は完全に何かが欠けているとFuture[Future[Future[A]]]が将来あるのですか?)

+0

あなたは '.flatMap()'または 'for comprehension'を使用する必要があります –

+0

ありがとうございました。しかし、 '' db [ - mongo.database](db < - mongo.database)のyield db.collection ['' BSoCollection]( '' GeoMaps '')は未来[BSONCollection]を生成しています...これは間違っていますか? –

+0

はい。あなたは腹が立っています。しかし、私は控えめな問題はありません。 'Future [BSONCollection]'あなたは別の 'Future [T]'に '.map()'することができます。 'Action'では、' .async() 'を' Future [Result] 'の結果と一緒に使うことができます。示された例では、すべての結果は 'Future [T]'/ –

答えて

0

あなたはdocumentationを見て持っている場合は、代わりに非推奨.dbの、.database機能を使用して例を見ることができます。

非同期.dbは、MongoConnectionプールでアクティブな接続を検出するのに十分な保証を提供していないため、非推奨です。

プールが開始されるとすぐに少なくとも1つの接続がアクティブであると仮定していましたが、ネットワークスピード/レイテンシに応じてReplicaSetノードのチェック/検出に時間がかかる場合があります。

ドライバがしばらくの間ノードに参加できない場合(ネットワークの中断、ノードの再起動など)、同じアサーションが間違っている可能性があります。ノードがオンラインに戻ってきたことをノードが示すようにするには、時間がかかることがあります。

新しい.databaseの解像度は非同期であり、使用可能な接続(選択した読み取り設定に応じて...)を待つ(またはしない)にはFailoverStrategyを使用します。

関連する問題