問題タブ [reactivemongo]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
scala - json をフォーマットするためのケース クラス - オブジェクト ID の有無
rest/json 経由でデータを取得し、reactivemongo を使用して mongodb に保存する play2 アプリを作成しています。
ケースクラスから構築されたモデルを使用しており、implicit val myFormat = Json.format[myCaseClass]
現在、mongodb からのオブジェクトのケース クラスがあります。それらには _id フィールドが含まれており、すべてが機能します。入ってくる新しいオブジェクトには当然この id フィールドがないため、Json.fromJson[myCaseClass](req.body)
バリデーターは失敗します。
本当に新しいオブジェクト用に別のケース クラスを作成する必要がありますか?それとも、クラスを複製して _id を削除することなく、より DRY で洗練されたソリューションがありますか?
scala - reactmongo を使用してドキュメントを挿入し、後で取得する
永続レイヤーに値を挿入して結果オブジェクトを返す場合、通常は、入力データを再度返すのではなく、新しく作成されたエンティティをフェッチすることをお勧めします。
Reactivemongo を使用して Scala でこれを実行しようとすると、自分の言語スキルにつまずきます。
findOne の署名は次のとおりです。
次のエラーが表示されます。
newUser オブジェクトを返せば問題ありません。
ここで何が起こっているのかを一般的に誤解していると思います-作成されたオブジェクトを一度に取得するより良い方法があるかもしれません。
scala - reactmongoを使用してmongoで可能性のあるスラッグを見つける
Play2とreactivemongoを使用して、mongodbで利用可能なスラッグを見つけようとしています。次の再帰的な方法を思いつきました。
次のエラーが表示されます
戻り値の型を変更したり、yield の結果をマッピングしたりするなど、いろいろ試しましたが、もっと単純で簡潔で正しい解決策があるのではないかと思います。要するに、別の非同期関数を呼び出す再帰関数があるということです。
findSlug の戻り値の型を Future[String] に変更すると、
正しい慣用的な解決策は何でしょうか?
reactivemongo - ReactiveMongo 強制クエリをスレーブで実行する
ReactiveMongo を使用して、クエリをスレーブで強制的に発生させる方法はありますか?
現在、slaveOk を使用していますが、クエリがスレーブ上で実行されることを保証するものではありません。
collection.find(query).options(QueryOpts().slaveOk)
slaveOk のドキュメント:
/** Toggles SlaveOk: The query is might be run on a secondary. */
mongodb - フィールドに null 値を使用するのはいつですか? また、MongoDB にフィールドを書き込む必要がないのはいつですか?
私は現在、reactivemongo と mongodb をいじっていますが、処理方法がわからないものを見つけました。
ケースクラスUserInfoがあるとしましょう:
このオブジェクトはユーザーを表します。ユーザーには常に firstName があり、電子メールまたは携帯電話番号を持っている場合もあります。
UserInfo コンパニオン オブジェクトで、UserInfo の書き込みと読み取りを定義します。このドキュメントを挿入すると、UserInfo が Mongo インスタンスに保存され、None のフィールドは null として保存されます。多くのユーザーがいるので、firstName + emailにインデックスを設定し、 firstName + mobileに 2 番目のインデックスを設定したいと思います。
firstName と email を使用して UserInfo を挿入します。残りのフィールドはなしです。
そして今、私がどのように処理するかわからない部分が来ます. None は null に書き込むため、null 値は userinfos のコレクションに保存されます。同じ firstName と email を挿入しようとしましたが、これは失敗するはずですが、間違った理由で失敗します。私の場合の理由は、jakob と null に対して作成されたインデックスがあるためです。
私が理解しているように、スパースは欠損値に対してのみ機能し、null は値であるため、この場合スパースは機能しません。では、これをどのように処理すればよいでしょうか。null の可能性がある値でインデックスを作成することは可能ですか? または、 None 値を他の方法で処理する必要がありますか? None が空の [T] パラメータを書き込むように、書き込みを変更できるかもしれません。これを処理するMongoDBの方法は何ですか?
mongodb - リアクティブ mongo と Scala を使用したネストされたドキュメント
Scala を使用して、ネストされたドキュメントを MongoDB に保存しようとしています。ドキュメントは次のようになります。
基本的に、ネストされた説明を保存したいと考えています。これは、プロジェクト ドキュメント内の複数の言語である可能性があります。
私が書いたコードは次のとおりです。
ただし、次のようなコンパイルエラーが発生しました
オーバーロードされたメソッド値は、代替手段で適用されます: [エラー] (プロデューサー: reactmongo.bson.Implicits.Producer[(String, reactmongo.bson.BSONValue)],プロデューサー: reactmongo.bson.Implicits.Producer[(String, reactmongo.bson.BSONValue) )] )reactivemongo.bson.AppendableBSONDocument [エラー] (els: (文字列、reactivemongo.bson.BSONValue) )reactivemongo.bson.AppendableBSONDocument [エラー] を適用できません ((文字列、reactivemongo.bson.BSONObjectID)、List[LocaleText ])...
基本的に、Scala は "description" という行が好きではありません -> BSONArray(project.description)
ただし、リスト/配列を使用して2つ以上の言語を許可することはできませんが、次の代替手段が機能します。
Project.description を Mongo 用の LocaleText のリストである BSONArray に変換するにはどうすればよいですか? 私の問題に光を当てていただければ幸いです。ご助力ありがとうございます。
json - フォームとして使用されるケースクラスでの検証の実装方法 (Json.fromJson を使用)
TypeSafe アクティベーター テンプレートをアプリ (play+reactivemongo+knockoutJS) の基礎として使用しています。
ユーザーを作成しようとしていますが、作成中に、提供された国が既に DB にあることを検証したいと考えています。しかし、プログラムの構造上、その検証を行うのが難しいと感じています。
コード
私の問題は折りたたむことです:国がDBに存在することを確認する必要があり、ユーザーを作成するために国を取得する必要があります(これは非同期アクションです)。
私の最善のアイデアは、UserForm に「fold」メソッド (Json...fold のように) を提供するものを実装させることです。そのため、国が見つからない場合は無効を返すことができます。存在することがわかっている場合は、MongoDB クエリを作成し、それを待って、Option で .get を実行する方がおそらく簡単です。
私が自分自身を明確にしたことを願っています。
何か案は?
[編集] いくつかの変更を加えて、以下の提案を受け入れました: あなたは私に方向性を与えましたが、私はそれを少し修正しました: [文字列] 国名の代わりに国をパラメータとして取るように UserForm クラスを変更しました。リストをレンダリングするテンプレートにリストを渡すと、選択した国が JSON 化され、そのままアップロードされると考えました (国には json.format があります)。
私は CountryDao に exists(c: Country) メソッドを作成しました。これは、DB を検索して結果を返すだけです。
次に、saveUserを次のように変更しました:
そしてコンパイルします。それも機能するかどうか見てみましょう:)
とにかく、今のところ解決したと思います。ありがとうございます
mongodb - マップを BSONDocument にシリアル化する Reactivemongo
BSONDocumentWriter
ドメイン オブジェクト (ケース クラス) を BSON ドキュメントにマップし、ReactiveMongo ドライバーを使用して MongoDB で永続化するように sを定義しました。ライターの定義は、ケース クラスの場合は非常に簡単です (ただし、面倒でエラーが発生しやすい: そのための Salat のような解決策があればいいのにと思います)。ただし、 a に対して同じことを行うことはできないようですMap[String,Any]
(値は数値、日付、または文字列型にすることができます)。マップのジェネリック ライター (およびリーダー) を定義するコード例を見つけました。
BSONDocumentWriter
しかし、 type V
、つまりスニペットに暗黙的なものがない場合、これは機能しません:
コンパイルしません:
BSONValue
ライターは aではなくa に書き込む必要があるのではないかと考えたBSONDocument
ので、次のように例を変更しました。
物事を単純にするためInt
に、値の型として使用しようとしましたが、スニペット:
コンパイルしません:
上記が機能した場合、値の型としていくつかの基本クラスを使用し、その暗黙的なライターを定義できたはずです。
なぜこれが起こっているのか、どうすれば解決できるのかわかりません。多分私は明らかな何かを見逃していますか?アイデア?
spray - Scala スプレー + リアクティブ Mongo ロギング
スプレー缶とリアクティブ mongo を使用してアプリケーションを実行しています。リアクティブ mongo のデバッグ ログをオフにする方法がわかりません。私の application.conf ファイル (\src\main\resources\application.conf) は次のようになります。