MongoDB で一意の値を返す

Tahseen Tauseef 2023年6月20日
  1. MongoDB の distinct() 関数
  2. distinct() 関数を使用して一意の値を返す
  3. MongoDB のフィールドに対して一意の値または個別の値を返す
  4. MongoDB の埋め込みフィールドに一意の値を返す
  5. 埋め込み配列フィールドの一意の値を返す
MongoDB で一意の値を返す

この記事では、MongoDB distinct() メソッドを使用して一意の値を返す方法に取り組みます。 さらに、配列とフィールドで一意の値を返すことについても説明します。

MongoDB では、一意の値をレンダリングしたり返したりしたい場合があり、distinct() メソッドを利用することでこれを実現できます。

distinct() メソッドは、単一のコレクションまたはビュー内のすべてのコレクションまたはビューにわたって特定のフィールドの個別の値の配列を生成し、mongo シェルで指定されたフィールドの一意の値を返すのに役立ちます。

MongoDB の distinct() 関数

構文:

db.collection.distinct(field, query, options)

MongoDB では、関数には、フィールドとクエリ演算子と呼ばれる 2つの必須パラメーターが必要です。 field パラメータは、distinct() メソッドで一意の値を取得するフィールドです。

クエリ パラメータは、個別の値を取得するドキュメントを指定します。 関数に担保オプション パラメータを送信できます。

指定されたフィールドの値が配列の場合、distinct() は各配列要素を個別の値として扱うことに注意してください。 たとえば、フィールドの値が [10, [10], 10] の場合、distinct()10[10]、および 10 を個別の値として扱います。

distinct() 関数を使用して一意の値を返す

distinct() 関数を使用して、MongoDB で一意の値を返しましょう。 以下のコレクションは、最初の例で使用されます。

db.movies.find().pretty()
{
        "_id" : ObjectId("60322d3501cd70079c48cb65"),
        "title" : "Enchanted",
        "year" : 2006,
        "score" : 10,
        "rating" : "PG",
        "__v" : 0
}
{
        "_id" : ObjectId("60322d3501cd70079c48cb67"),
        "title" : "Final Destination II",
        "year" : 2015,
        "score" : 10,
        "rating" : "PG-13",
        "__v" : 0
}
{
        "_id" : ObjectId("6190189ef5c8903629012fe1"),
        "title" : "Fifty Shades of Grey",
        "year" : 2015,
        "score" : 10,
        "rating" : "NC-17",
        "__v" : 0
}

MongoDB のフィールドに対して一意の値または個別の値を返す

上記のムービー コレクションは、この例で指定されたフィールドに対して一意の値を返します。 評価フィールドから一意の値が必要だとしましょう。

クエリ:

db.movies.distinct( "rating" )
[ null, "", "NC-17", "PG", "PG-13"]

上記のクエリを使用した後、distinct() 関数は、コレクションに対して MongoDB で一意の値を返すのに役立ちました。

MongoDB の埋め込みフィールドに一意の値を返す

この例では、埋め込みフィールドの一意の値を返すことが示されています。 ただし、前の例で使用されたコレクションには埋め込みフィールドが含まれていませんでした。

したがって、以下に示すように、新しいコレクションが使用されます。

db.drones.find().pretty()
{
        "_id" : ObjectId("61673f46b34f185eb7b2bf0c"),
        "utility" : [
                "Natural Resource Exploration",
                "Remote sensing",
                "Real estate and construction",
                "Recreation",
                "Delivery"
        ],
        "onSale" : false,
        "name" : "Nimbari Gryphon Medeta 65",
        "price" : 77500,
        "weight" : "77 kilograms",
        "additionalDetails" : {
                "material" : "carbon fiber",
                "moreUses" : [
                        "Precision Agriculture",
                        "Land Inspection",
                        "Water Inspection",
                        "Cinematography"
                ]
        }
}
{
        "_id" : ObjectId("61673f46b34f185eb7b2bf0d"),
        "utility" : [
                "Natural Resource Exploration",
                "Remote sensing",
                "Real estate and construction",
                "Recreation",
                "Delivery"
        ],
        "onSale" : false,
        "name" : "X-Strimmer Eye",
        "price" : 23500,
        "weight" : "24 kilograms",
        "additionalDetails" : {
                "material" : "glass fiber",
                "moreUses" : [
                        "Precision Agriculture",
                        "Cinematography"
                ]
        }
}
{
        "_id" : ObjectId("61673f46b34f185eb7b2bf0e"),
        "utility" : [
                "Natural Resource Exploration",
                "Remote sensing",
                "Real estate and construction",
                "Recreation",
                "Delivery"
        ],
        "onSale" : false,
        "name" : "Khai Balemosh Shefqa TRX",
        "price" : 120500,
        "weight" : "80 kilograms",
        "additionalDetails" : {
                "material" : "aluminum",
                "moreUses" : [
                        "Precision Agriculture",
                        "Land Inspection"
                ]
        }
}

次のクエリは、上記のデータベース コレクションのすべての埋め込みフィールドから一意の値を返すことができます。

クエリ:

db.drones.distinct( "additionalDetails.material" )
[ "aluminum", "carbon fiber", "glass fiber"]

埋め込み配列フィールドの一意の値を返す

distinct() 関数を使用すると、上記と同じコレクションを使用して、distinct() 関数を使用して埋め込み配列フィールドから一意の値を返すことができます。

クエリ:

db.drones.distinct( "additionalDetails.moreUses" )
["Cinematography","Land Inspection"]

この MongoDB チュートリアルの記事では、コレクションを使用した個別の関数の詳細を示します。 配列とフィールドまたは埋め込みフィールドで一意の値を返すことも、コード セグメントで説明されています。

関連記事 - MongoDB Query