2017-01-23 6 views
1

find基準を持つコレクション内の文書の無作為抽出サンプルを取得する必要があります。私はfindクエリを使用して、このsample凝集を組み合わせることができますどのようにMongoDB Java API - サンプル集約を検索クエリと組み合わせるには?

Bson sample = com.mongodb.client.model.Aggregates.sample(size); 
BasicDBObject query = new BasicDBObject().append("myKey", value); 

+0

どのような場合ですか?集約を通常の検索操作と組み合わせることはできません。サンプル演算子が必要な場合は、集計を使用します。 – Veeram

+0

コレクション内のフィールド(ブール値フィールド)に従っていくつかのドキュメントをサンプリングする必要があります。 @Veeram – talha06

答えて

2

$matchとのアグリゲーションを使用してから$sampleを使用できます。

import static com.mongodb.client.model.Aggregates.*; 
import static com.mongodb.client.model.Filters.*; 
import static java.util.Arrays.asList; 

Bson match = match(eq("myKey", value)); 
Bson sample = sample(size); 
collection.aggregate(asList(match, sample)); 
+0

それにもかかわらず、 'db.coll1.count({key1:false、key2:true})'は2946のドキュメントを返します。 'Bson sample = com.mongodb.client.model.Aggregates.sample(size); Bson match1 = com.mongodb.client.model.Aggregates.match(eq( "key1"、true)); Bson match2 = com.mongodb.client.model.Aggregates.match(eq( "key2"、false)); Bson matchFilters =と(match1、match2); mongoDB.getCollection( "coll1")。aggregate(asList(sample、matchFilters)) 'は、46個のドキュメントしか返しません。この問題の理由は何ですか? – talha06

+1

サンプルサイズは?サンプルサイズに等しいドキュメントを返し、 'aggregate(asList(matchFilters、sample)) 'にも変更します。 – Veeram

+0

いいえ、集計の順序を変更した後、期待どおりに動作します。あなたの助けをありがとう、非常に感謝します。 – talha06

関連する問題