MongoDBで配列内の個別の値の長さを取得する方法
MongoDBで配列内の個別の値の長さを取得する方法
配列から重複しない値(個別の値)を取得するには、MongoDBのdistinct()メソッドを使用します。さらに、取得した結果の長さ(要素数)を知りたい場合は、JavaScriptのlengthプロパティを組み合わせることで簡単に実現できます。
この記事では、実際のコレクションを作成しながら、具体的な手順をわかりやすく解説します。
1. ドキュメントを含むコレクションを作成する
まずは、名前の配列を持つドキュメントを挿入してコレクションを作成します。
> db.demo36.insertOne({"Names":["Chris","Bob"]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e17643bcfb11e5c34d898d4")
}
> db.demo36.insertOne({"Names":["Mike","Sam","Carol"]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e176449cfb11e5c34d898d5")
}
> db.demo36.insertOne({"Names":["Chris","Bob","David"]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e17645bcfb11e5c34d898d6")
}2. find()メソッドですべてのドキュメントを表示する
次に、find()メソッドを使ってコレクション内のすべてのドキュメントを確認してみましょう。
> db.demo36.find();
このクエリを実行すると、以下のような出力が得られます。
{ "_id" : ObjectId("5e17643bcfb11e5c34d898d4"), "Names" : [ "Chris", "Bob" ] }
{ "_id" : ObjectId("5e176449cfb11e5c34d898d5"), "Names" : [ "Mike", "Sam", "Carol" ] }
{ "_id" : ObjectId("5e17645bcfb11e5c34d898d6"), "Names" : [ "Chris", "Bob", "David" ] }3. 個別の値の長さを取得するクエリ
ここが本題です。以下のように、distinct()メソッドで「Names」フィールドの個別の値を取得し、続けてlengthプロパティを呼び出すことで、その長さを求めることができます。
> db.demo36.distinct('Names').length;このクエリを実行すると、以下の出力が返されます。
6
解説
この例では、3つのドキュメントの配列には合計8つの要素が含まれていますが、「Chris」と「Bob」はそれぞれ2回登場しているため重複として除外されます。その結果、個別の値は「Chris」「Bob」「Mike」「Sam」「Carol」「David」の6つとなり、lengthプロパティによって「6」が出力されました。
このように、db.collection.distinct(フィールド名).lengthというシンプルな組み合わせにより、特定フィールドのユニークな値の総数を簡単に取得できます。データ分析や集計処理の際に非常に便利なテクニックですので、ぜひ活用してください。
-
MongoDBで配列要素をグループ化し、同じ価格の製品数をカウントする方法
MongoDBで配列内のアイテムをグループ化するには、$group演算子を$sortと組み合わせて使用します。この記事では、実際にコレクションを作成しながら、同じ価格の製品をカウントする手順を詳しく解説します。サンプルコレクションの作成まず、ドキュメントを含むコレクションを作成しましょう。以下の例では、複数の製品情報(ProductInformation)を配列として持つドキュメントを挿入します。> db.demo566.insertOne( ... { ... ... ProductInformation : [ ... { ... Produ
-
MongoDB集計パイプラインで重複するNameフィールド値ごとの出現回数を取得する方法
MongoDBでは、$unwindと$groupを組み合わせた集計(アグリゲーション)パイプラインを使うことで、配列内に存在する重複したフィールド値を名前ごとにグループ化し、それぞれの出現回数を簡単に取得できます。ここでは、具体的な例をもとにその手順を解説します。サンプルコレクションの作成まずは、ドキュメントを含むコレクションを作成してみましょう。以下の例では、demo558というコレクションに、国コードと複数人の受講科目情報を持つドキュメントを挿入します。> db.demo558.insertOne( ... { ... _id : 100, ... CountryCode