MongoDBは、コレクションまたはビュー内のドキュメントをカウントするためのさまざまな方法を提供します。前の集約パイプラインステージからの受信ドキュメントをカウントできる集約演算子もいくつかあります。
この記事では、mongoシェルでドキュメントをカウントする次の方法を紹介します。
カウントコード> コマンド
-
db.collection.count()
メソッド -
db.collection.countDocuments()
メソッド -
db.collection.estimatedDocumentCount()
メソッド -
cursor.count()
メソッド -
$ count
集約パイプラインオペレーター -
$ sortByCount
集約パイプラインオペレーター
カウントコード> コマンド
count
コマンドは、コレクションまたはビュー内のドキュメントの数をカウントします。
例:
db.runCommand( {
count: "pets",
query: { type: "Dog" }
} )
結果:
{ "n" : 4, "ok" : 1 }
この例では、 pets
に4匹の犬がいることがわかります。 コレクション。
また、カウントとコマンドステータスを含むドキュメントが返されることもわかります。
db.collection.count()
方法
db.collection.count()
メソッドは、 find()
に一致するドキュメントの数を返します コレクションまたはビューを照会します。
コレクション
partは、カウント操作を実行するコレクションまたはビューの名前です。
db.collection.count()
methodは、 count
のラッパーメソッドです。 コマンド。
例:
db.pets.count({
"type": "Dog"
})
結果:
4
db.collection.count()
メソッドはcount
のようなドキュメントを返しません コマンドは行います。カウントを返すだけです。
countDocuments()
方法
db.collection.countDocuments()
メソッドは、コレクションまたはビューのクエリに一致するドキュメントの数を返します。
コレクション
partは、カウント操作を実行するコレクションまたはビューの名前です。
例:
db.pets.countDocuments({
"type": "Dog"
})
結果:
4
基本的にdb.collection.count()
と同じ結果です 、ただし、 countDocuments()
を使用することをお勧めします count()
の代わりに 可能であれば。
MongoDBのドキュメントには次のように記載されています:
4.0機能と互換性のあるMongoDBドライバーは、それぞれのカーソルとコレクションの
count()
を廃止します。countDocuments()
用の新しいAPIを支持するAPI およびestimatedDocumentCount()
。特定のドライバーの特定のAPI名については、ドライバーのドキュメントを参照してください。
また、クエリ述語なしで使用する場合、 count()
メタデータに依存しているため、おおよその数になる可能性があります。 countDocuments()
一方、メソッドはメタデータに依存せず、ドキュメントの集計を実行することで正確なカウントを返します。
estimatedDocumentCount()
方法
db.collection.estimatedDocumentCount()
メソッドはcount
のラッパーです コレクションまたはビュー内のすべてのドキュメントの数を返すコマンド。
例:
db.pets.estimatedDocumentCount()
結果:
7
db.collection.estimatedDocumentCount()
メソッドはクエリフィルターを取りません。代わりに、メタデータを使用して、コレクション/ビュー全体のドキュメント数を返します。
cursor.count()
方法
cursor.count()
メソッドはcount
のラッパーです カーソルによって参照されるドキュメントの数をカウントするコマンド。
実際にはクエリを実行しません。クエリによって返される結果の数をカウントして返すだけです。
例:
db.pets.find({"type": "Dog"}).count()
結果:
4
これは、 db.collection.count()
と同等です。 上記のメソッドの例。
上で引用したように、4.0機能と互換性のあるMongoDBドライバーは、それぞれのカーソルとコレクションの count()
を廃止します。 countDocuments()
用の新しいAPIを支持するAPI およびestimatedDocumentCount()
。
$ count
アグリゲーションパイプラインオペレーター
$ count
集約演算子は、現在のステージに入力されたドキュメントの数のカウントを含む、集約パイプラインの次のステージにドキュメントを渡します。
例:
db.pets.aggregate([
{
$match: { type: "Dog" }
},
{
$count: "DogCount"
}
])
結果:
{ "DogCount" : 4 }
この演算子を使用してグループ化された結果をカウントする方法を示す別の例を次に示します。
db.pets.aggregate([
{
$match: { weight: { $lt: 30 } }
},
{
$group: { _id: "$type", count: { $sum: 1 } }
},
{
$sort : { count : -1, _id: 1 }
}
])
結果:
{ "_id" : "Dog", "count" : 3 }
{ "_id" : "Cat", "count" : 2 }
{ "_id" : "Bat", "count" : 1 }
この特定のクエリは、 $ sortByCount
を使用することで、より少ないコードで実行できます。 集計パイプライン演算子(下記)。
$ sortByCount
アグリゲーションパイプラインオペレーター
$ sortByCount
集計演算子は、指定された式の値に基づいて受信ドキュメントをグループ化し、次に、個別のグループごとにドキュメントの数を計算します。
$ sortByCount
の使用方法は次のとおりです 前の例と同じ結果を得るには:
db.pets.aggregate([
{
$match: { weight: { $lt: 30 } }
},
{
$sortByCount: "$type"
}
])
結果:
{ "_id" : "Dog", "count" : 3 } { "_id" : "Cat", "count" : 2 } { "_id" : "Bat", "count" : 1 }
各グループは、次の2つのフィールドで構成される独自のドキュメントに出力されます。
-
_id
個別のグループ化値を含むフィールド、および カウントコード> そのグループに属するドキュメントの数を含むフィールド。
ドキュメントはcount
で並べ替えられます 降順。