MongoDB 集計数を使用してドキュメントをカウントする方法

Mongodb Ji Ji Shuwo Shi Yongshitedokyumentowokauntosuru Fang Fa



名前が示すように、フィールド レコードをカウントするには、MongoDB の $count 集計を使用する必要があります。レコードをカウントする一般的な方法の 1 つは、count() メソッドを使用することです。さらに、特定の集計演算子を使用すると、集計パイプラインの前のステージから取り込まれたレコードをカウントできます。今日のこのガイドでは、コード例を使用して MongoDB のカウント集計について説明します。

例01

MongoDB のデータベース コレクションのフィールドに対して $count 操作を実行するには、多数のレコードが必要です。したがって、「Test」という名前のコレクションを作成し、insertMany() 関数を使用してそこに 12 レコードを同時に挿入しました。これで、この「Test」コレクションのレコードが、find() 関数クエリを介して MongoDB シェルに表示されました。 _id、name、score の合計 3 つのフィールドがあることがわかります。

テスト> db.Test.find({})







ここで、任意のフィールドに $count ステージを適用するには、「db」命令内で MongoDB の集計関数を使用する必要があります。集計関数は、特定のフィールドに対して $match 演算子を使用する条件ステートメントと、その後に $count 演算子を使用して指定された条件フィールドから取得した合計数を表示する新しいフィールドで構成されます。



この例では、$match 演算子を使用してスコア フィールドの値「60」に一致するレコードを検索し、$count 演算子を使用してフェッチされたレコードの総数をカウントし、それらをフィールドの下に表示しています。 「SameScore」という名前の新しいフィールド。このクエリの出力には、値「2」を持つフィールド「SameScore」が表示されています。これは、コレクション「Test」内に「スコア」値「60」が 2 であるレコードが 2 つあることを示しています。



db.Test.aggregate([ { $match: { 'スコア' : 60 } }、{ $count: 「セイムスコア」 } ])

$count 集計を使用して、テスト コレクションの「名前」フィールドなど、数値以外のフィールドをカウントすることもできます。一致集計を使用して、名前フィールドの値が「John」であるコレクション内のレコードを検索しています。カウント集計により、一致したレコードの合計数が 2 に正常にカウントされました。





db.Test.aggregate([ { $match: { '名前' : 「ジョン」 } }、{ $count: 'SameName' } ])

例02

上記のクエリを更新し、別の条件を適用して別のレコードを取得してみましょう。今回は、スコア フィールドの $match 集計を適用して、スコア フィールドの値が 30 未満のレコードの合計数を取得します。カウント集計では、レコードの合計数がカウントされ、新しいレコードに追加されます。列「グレードD」。出力には、一致した値のカウント数として結果「2」が表示されます。

db.Test.aggregate( [ { $match: { スコア: { $lt: 30 } } }、{ $count: 「グレードD」 } ])

論理演算子を適用するときに $count 集計を使用して、フィールド レコードに対して複数の条件を実行することもできます。したがって、$and 演算子を使用して、合計 2 つの条件 (gte (以上) と lte (以下) が「スコア」フィールドに適用されています。結果を取得してそのレコードをカウントするには、両方の条件が true である必要があります。合計数は、一致基準を持つレコードが 5 つあることを示しています。



db.Test.aggregate( [ { $match: { 「$と」 : [ { 'スコア' : {$gte: 60 }}、{ 'スコア' : {$lte: 80 }} ] }}、

{ $count: 「グレードB」 } ])

例03

上の図では、カウント集計を使用して、指定されたスコアや名前など、特定のフィールド値に一致するレコードの数のみを取得しています。 MongoDB の集計メソッドを使用すると、コレクション内の重複する値を含むすべてのレコードのカウント数を取得できます。

このためには、以下のように、集計関数コマンド内で $group 集計を使用する必要があります。フィールド _id は、カウント集計が機能する「name」フィールドを指定するために使用されています。これに加えて、NameCount ユーザー定義フィールドは $count 集計を利用して、「名前」フィールド内の重複をいくつかカウントします。

このクエリの出力は下に表示されています。これには、「name」フィールドの値と、値の重複に応じた NameCount フィールド内のそのカウント数が含まれます (Cillian には 4 つの重複があるなど)。

db.Test.aggregate([ { $group: { _id: '$name' 、NameCount: { $count: {} }, }, }, ])

例04

ネストされたフィールド レコードのカウント集計を使用して、特定のフィールド値をカウントすることもできます。これをさらに詳しく説明するには、「Teacher」という名前のコレクションを作成し、その中にネストされたフィールド「sub」と配列タイプのフィールド「shift」を、他のフィールド(名前と支払い)とともに追加しました。 find() 関数は、このコレクションの 5 つのレコードすべてを表示しています。

テスト> db.Teacher.find({})

これで、一致演算子を含む集計関数が適用されました。また、$and 演算子は、2 つの異なる条件を含む「sub」フィールドのサブフィールド「math」に適用されています。その後、カウントが計算されます。出力には、サブフィールドの計算値が 10 より大きく 20 未満のレコードが 2 つあることが示されています。

db.Teacher.aggregate( [ { $match: { 「$と」 : [ { 「サブ数学」 : {$gte: 10 }}、{ 「サブ数学」 : {$lte: 二十 }} ] }}, { $count: '甲種' } ])

例05

最後の例を見て、今回は count 集計を使用する代わりに count() 関数を使用する方法を説明します。したがって、count() 関数は、「Teacher」コレクションの配列型フィールド、つまり「shift」に適用されています。インデックス 2 を使用する配列フィールドのインデックスを使用して、一致基準を「夜」として指定しました。エントリ「夜」の総カウント数として「2」が出力されます。

db.Teacher.count({ 「シフト.2」 : '夜' })

非常に似た方法で、count() 関数は、コレクション「Teacher」の「sub」フィールドのサブフィールド「phy」など、ネストされたフィールドにも適用できます。 「phy」サブフィールドで 14 未満の値を示す「lte」演算子を使用して一致基準を指定しました。この命令の出力には「2」、つまり 14 未満の値を持つ 4 つのレコードが表示されています。

db.Teacher.count( { 「サブファイ」 : { $lte: 14 } })

結論

このガイドでは、いくつかのコード例を使用して、MongoDB の $count 集計の使用方法を実証し、詳しく説明しています。この例には、コレクションを通じて特定の値レコードとすべてのフィールド レコードのカウント数をフェッチするためのカウント集計の意味が含まれています。また、配列フィールドおよび埋め込み (ネストされた) フィールドでのカウント集計の使用も含まれます。最後に、count 集計と count 関数の使用を区別するために、count() 関数の例が含まれています。