ドキュメントをカウント
Overview
このガイドでは、コレクション内のドキュメント数のの正確な推定値を取得する方法を学びます。
サンプル データ
このガイドの例を実行するには、次のスニペットを使用してサンプルデータを tea.ratings
コレクションにロードします。
coll := client.Database("tea").Collection("ratings") docs := []interface{}{ bson.D{{"type", "Masala"}, {"rating", 10}}, bson.D{{"type", "Matcha"}, {"rating", 7}}, bson.D{{"type", "Assam"}, {"rating", 4}}, bson.D{{"type", "Oolong"}, {"rating", 9}}, bson.D{{"type", "Chrysanthemum"}, {"rating", 5}}, bson.D{{"type", "Earl Grey"}, {"rating", 8}}, bson.D{{"type", "Jasmine"}, {"rating", 3}}, bson.D{{"type", "English Breakfast"}, {"rating", 6}}, bson.D{{"type", "White Peony"}, {"rating", 4}}, } result, err := coll.InsertMany(context.TODO(), docs) if err != nil { panic(err) } fmt.Printf("Number of documents inserted: %d\n", len(result.InsertedIDs))
Tip
存在しないデータベースとコレクション
書き込み操作を実行するときに必要なデータベースとコレクションが存在しない場合は、サーバーが暗黙的にそれらを作成します。
各ドキュメントには、 フィールドとtype
rating
フィールドに対応するお茶の種類の評価が含まれています。
正確なカウント
クエリフィルターに一致するドキュメントの数をカウントするには、CountDocuments()
メソッドを使用します。
Tip
空のクエリフィルターを渡すと、このメソッドはコレクション内のドキュメントの総数を返します。
動作の変更
CountOptions
タイプを渡すことで、CountDocuments()
の動作を変更することができます。オプションを指定しない場合、ドライバーはデフォルト値を使用します。
CountOptions
タイプでは、次の方法でオプションを設定できます。
方式 | 説明 |
---|---|
SetCollation() | The type of language collation to use when sorting results. Default: nil |
SetHint() | The index to use to scan for documents to count. Default: nil |
SetLimit() | The maximum number of documents to count. Default: 0 |
SetMaxTime() | The maximum amount of time that the query can run on the server. Default: nil |
SetSkip() | The number of documents to skip before counting. Default: 0 |
例
次の例では、rating
が 6
より小さいドキュメントの数をカウントします。
filter := bson.D{{"rating", bson.D{{"$lt", 6}}}} count, err := coll.CountDocuments(context.TODO(), filter) if err != nil { panic(err) } fmt.Printf("Number of ratings less than six: %d\n", count)
集計
また、$count ステージを含めて、集計パイプライン内のドキュメントの数をカウントすることもできます。
例
次の例では、次のアクションが実行されます。
rating
が5
より大きいドキュメントの数をカウントする次のフィールドにカウントを割り当てます:
total_documents
matchStage := bson.D{{"$match", bson.D{{"rating", bson.D{{"$gt", 5}}}}}} countStage := bson.D{{"$count", "total_documents"}} cursor, err := coll.Aggregate(context.TODO(), mongo.Pipeline{matchStage, countStage}) if err != nil { panic(err) } var results []bson.D if err = cursor.All(context.TODO(), &results); err != nil { panic(err) } for _, result := range results { fmt.Println(result) }
推定のカウント
コレクション内のドキュメントの数を見積もるには、EstimatedDocumentCount()
メソッドを使用します。
注意
EstimatedDocumentCount()
メソッドは、コレクション全体をスキャンするのではなく、コレクションのメタデータを使用するため、CountDocuments()
メソッドよりも高速です。
動作の変更
EstimatedDocumentCountOptions
タイプを渡すことで、EstimatedDocumentCount()
の動作を変更することができます。オプションを指定しない場合、ドライバーはデフォルト値を使用します。
EstimatedDocumentCountOptions
タイプでは、次の方法でオプションを設定できます。
方式 | 説明 |
---|---|
SetMaxTime() | The maximum amount of time that the query can run on the server. Default: nil |
例
次の例では、ratings
コレクション内のドキュメントの数を見積ります。
count, err := coll.EstimatedDocumentCount(context.TODO()) if err != nil { panic(err) } fmt.Printf("Estimated number of documents in the ratings collection: %d\n", count)
詳細情報
上記で説明されている操作の詳細については、次のガイドを参照してください。
API ドキュメント
このガイドで説明したメソッドや型の詳細については、次の API ドキュメントを参照してください。