問題タブ [mongo-java-driver]
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.
java - MongoDB は、集計パイプラインでドキュメント フィールドを比較します
次のようなドキュメントのコレクションがあります。
フィールド $bornIn がフィールド $city.name と等しいすべてのドキュメントを取得したいと考えています。これはパイプラインの中間段階として行う必要があるため、$where 演算子を使用できません。
オンラインで検索したところ、次のような実装の提案が見つかりました。
ただし、フィールドが異なるものとしてマークされるため、シェル経由でも Java ドライバー経由でも機能しませんでした。完全を期すために、コードを報告します。
何か提案はありますか?私は MongoDB 3.2 を使用していますが、Java ドライバーを介してこれを行う必要があります。
ありがとう!!
PS。関係ありませんが、実際には上記のドキュメントは、コレクション「都市」と「人物」の間の $lookup ステージの出力であり、$name/$mayor で結合されています.. とてもクールです!! :D:D
java - MongoCursor には count() メソッドがありませんか?
だから私のコードは次のとおりです。
ここで、とtotal count
の前のドキュメントの を知りたいと思います。skip
limit
まったく同じ質問に対する回答がありますが、私が持っているものmongo-java-driver v3.1.0
と使用する API が異なります。FindIterableクラスとcount()
MongoCursorクラスsize()
の両方にメソッドはありません。ありがとう!
アップデート
collection.count
@Philippが言ったように、唯一の回避策はmongodbへの別の呼び出しを行うことのようです
mongodb - Javaプログラムからmongoクエリを実行するには?
mongo-shell から実行するクエリです。同じクエリを Java プログラムから実行したいと考えています。どうやってやるの?
mongodb - java apiを使用するmongodbバージョン3では、クエリ中にヒントを与えるにはどうすればよいですか
java api を使用する mongodb バージョン 3 では、クエリ中にヒントを与える方法 クエリ結果は、MongoCursor を持つ FindIterable です。 特定のインデックスを使用するためのヒントをどのように与えるべきですか?
古いバージョンでは、ヒント用の API を持つ DBCursor があります。
java - MongoDB Java ドライバー 3.0 でオプションのパーツを使用してクエリを作成する方法
オプションのクエリパーツを使用して db クエリを作成するメソッドを作成したいと考えています。
昔は次のようなメソッドを書くことができました:
新しいMongoDB Java driver 3.0でそれを達成する方法
私は何かを試しました
Document
しかし、すべてのフィルター メソッドは、流暢に変換できなかった BSON を返します。フィルターはそのように使用できなかったようです...かなり役に立ちません。
私は何かが恋しいですか。それを賢く行う方法は?
mongodb - com.mongodb.BasicDBList を Scala で役立つものに変換する方法は?
これまでのところ、mongo-hadoop-core 1.4.2 を使用して MongoDB からデータを取得できています。操作したいデータは、クエリしているコレクション内の各ドキュメント内の埋め込みドキュメント内の配列内の値であり、これらの値はDouble
. コレクションから取得したデータの型は RDD[(Object, org.bson.BSONObject)] です。これは、各ドキュメントが型 (Object, org.bson.BSONObject) のタプルであることを意味します。
埋め込みドキュメントを取得したいときはいつでも(spark-shell 1.5.1で作業しています):
タイプ Object を BasicDBObject に変換するのは非常に不便ですが、使用するにはそれを行う必要がありますget(key: String)
。.asInstanceOf[BasicDBObject]
代わりに使用することもできます match {case x: BasicDBObject => x}
が、より良い方法はありますか??. Double
、Int
、String
などの特定の型を取得することは、クラスDate
から継承されたメソッドを使用して簡単に行うことができます。BasicBsonObject
に関してはBasicDBList
、から継承されたget(key: String)
メソッドがあり、キャストできるが呼び出しのみを使用して返すBasicBsonList
メソッドがあり、キャストできないの配列を返すから継承されたメソッドがあります。ここ:Object
Double
.asInstanceOf[Double]
toArray()
java.util.ArrayList
Object
Double
.map(_.asInstanceOf[Double])
しかし、時にはそれが機能します。一部のドキュメントではこのキャストが機能しますが、他のドキュメントでは機能せず、上記のエラー メッセージが出力されます。これは、MongoDB が Spark に提供するデータ構造の問題でしょうか?これらのドキュメントだけでしょうか? 30 個の値を持つ小さな配列は、常に機能するようです。
これまでの私の解決策は、この非効率的な変換です:
ここで何かが足りないのですか、それとも本当に不便ですか? Object
これらすべてのメソッドがorを返さなければならないのはなぜBSONObject
ですか? 私が見つけたこの問題を克服する方法はありますか?java.lang.Integer
double にキャストされる配列に整数がない場合、これはどこから来たのでしょうか?
mongodb-java - MongoIterable.forEach と Iterable.forEach の比較
MongoIterable.forEach
Block
Java 8 と非常によく似た が必要Consumer
です。これらは問題を引き起こすほど似ています。たとえば、次のコードはコンパイルされません。
コンパイラは と の間Iterable.forEach( Consumer )
で決定できないためMongoIterable.forEach( Block )
です。これを修正するには、パラメーターを明示的に入力するなどの回避策が必要です。
または代わりにMongoIterable
、プレーンとして扱いますStream
:
のようなインターフェイスMongoIterable.forEach
を使用して定義されていないのはなぜですか? さらに良いことに、なぜ入っているのですか?Consumer
MongoIterable.forEach(Consumer<? super TResult> consumer)
forEach
MongoIterable