Docs Menu
Docs Home
/ / /
Go
/ / /

ドキュメントをカウント

項目一覧

  • Overview
  • 正確なカウント
  • 集計
  • 推定のカウント
  • 詳細情報

このガイドでは、コレクション内のドキュメント数の正確な推定値を取得する方法を学びます。

このセクションの例では、tea コレクション内のドキュメントのモデルとして次の Tea 構造体を使用します。

type Tea struct {
Type string
Rating int32
}

このガイドの例を実行するには、次のスニペットを使用して、サンプル データを db データベース内の tea コレクションにロードします。

coll := client.Database("db").Collection("tea")
docs := []interface{}{
Tea{Type: "Masala", Rating: 10},
Tea{Type: "Matcha", Rating: 7},
Tea{Type: "Assam", Rating: 4},
Tea{Type: "Oolong", Rating: 9},
Tea{Type: "Chrysanthemum", Rating: 5},
Tea{Type: "Earl Grey", Rating: 8},
Tea{Type: "Jasmine", Rating: 3},
Tea{Type: "English Breakfast", Rating: 6},
Tea{Type: "White Peony", Rating: 4},
}
result, err := coll.InsertMany(context.TODO(), docs)

Tip

存在しないデータベースとコレクション

書き込み操作を実行するときに必要なデータベースとコレクションが存在しない場合は、サーバーが暗黙的にそれらを作成します。

各ドキュメントには、茶葉の種類とその格付けが記載されています。これらのアイテムは、type フィールドと rating フィールドに対応します。

クエリフィルターに一致するドキュメントの数をカウントするには、CountDocuments() メソッドを使用します。空のクエリフィルターを渡すと、このメソッドはコレクション内のドキュメントの総数を返します。

Tip

CountDocuments()を使用してコレクション内のドキュメントの合計数を返す場合、MongoDB はコレクションスキャンを実行します。ヒントを使用して_idフィールドの組み込みインデックスを活用することで、コレクションスキャンを回避し、このメソッドのパフォーマンスを向上させることができます。この手法は、空のクエリ パラメーターを使用してCountDocuments()を呼び出す場合にのみ使用してください。

opts := options.Count().SetHint("_id_")
count, err := coll.CountDocuments(context.TODO(), bson.D{}, opts)
if err != nil {
panic(err)
}

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

次の例では、rating6 より小さいドキュメントの数をカウントします。

filter := bson.D{{"rating", bson.D{{"$lt", 6}}}}
count, err := coll.CountDocuments(context.TODO(), filter)
if err != nil {
panic(err)
}
fmt.Printf("Number of documents with a rating less than six: %d\n", count)

また、$count ステージを含めて、集計パイプライン内のドキュメントの数をカウントすることもできます。

次の例では、次のアクションが実行されます。

  • rating フィールドの値が 5 より大きいドキュメントの数をカウントする

  • counted_documents フィールドにカウントを割り当てる

matchStage := bson.D{{"$match", bson.D{{"rating", bson.D{{"$gt", 5}}}}}}
countStage := bson.D{{"$count", "counted_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

次の例では、tea コレクション内のドキュメントの数を見積ります。

count, err := coll.EstimatedDocumentCount(context.TODO())
if err != nil {
panic(err)
}
fmt.Printf("Estimated number of documents in the tea collection: %d\n", count)

上記で説明されている操作の詳細については、次のガイドを参照してください。

  • クエリを指定する

  • 返された結果をスキップする

  • 返される結果の数を制限する

  • 集計

  • 照合

このガイドで説明したメソッドや型の詳細については、次の API ドキュメントを参照してください。

戻る

クエリを指定する