MongoDBでは、distinct
集計コマンドは、単一のコレクション全体で指定されたフィールドの個別の値を検索します。
個別の値の配列を含むドキュメントと、クエリ統計およびクエリプランを含む埋め込みドキュメントを返します。
個別の値は、冗長な重複が削除された値です。個別の値は一意の値です。たとえば、同じ値のドキュメントが2つまたは3つある場合、distinct
コマンドは1つの値のみを返します。
db.collection.distinct()
もあります メソッド。distinct
のシェルラッパーメソッドです。 コマンド。
例
pets
というコレクションがあるとします。 次のドキュメントを使用します。
{ "_id" : 1, "name" : "Wag", "type" : "Dog", "weight" : 20 } { "_id" : 2, "name" : "Bark", "type" : "Dog", "weight" : 10 } { "_id" : 3, "name" : "Meow", "type" : "Cat", "weight" : 7 } { "_id" : 4, "name" : "Scratch", "type" : "Cat", "weight" : 8 } { "_id" : 5, "name" : "Bruce", "type" : "Bat", "weight" : 3 } { "_id" : 6, "name" : "Fetch", "type" : "Dog", "weight" : 17 } { "_id" : 7, "name" : "Jake", "type" : "Dog", "weight" : 30 }
distinct
を使用できます 個別のペットタイプを返すコマンド。
distinct
コマンドは、コレクションを最初のフィールドとして受け入れ、キーを2番目のフィールドとして受け入れます。キーは、個別の値を返すフィールドです。
db.runCommand ( { distinct: "pets", key: "type" } )
結果:
{ "values" : [ "Bat", "Cat", "Dog" ], "ok" : 1 }
この例では、コレクションに4匹の犬と2匹の猫がいますが、配列にはそれぞれ1匹しか含まれていません。 distinct
コマンドは重複する値を削除しました。
元のドキュメントにはバットが1つしかないため、distinct
コマンドはそれを変更しません–重複排除する重複値はありませんでした。
埋め込みドキュメント
ドット表記を使用して、埋め込みフィールドから個別の値を取得できます
products
というコレクションがあるとします。 次のドキュメントが含まれています:
{ "_id" : 1, "product" : { "name" : "Shirt", "color" : "White" }, "sizes" : [ "S", "M", "L" ] } { "_id" : 2, "product" : { "name" : "Shirt", "color" : "Green" }, "sizes" : [ "S", "M", "XL" ] } { "_id" : 3, "product" : { "name" : "Shirt", "color" : "White" }, "sizes" : [ "S", "M", "L" ] } { "_id" : 4, "product" : { "name" : "Shorts", "color" : "Green" }, "sizes" : [ "M", "XS" ] } { "_id" : 5, "product" : { "name" : "Shorts", "color" : "Brown" }, "sizes" : [ "S", "M" ] } { "_id" : 6, "product" : { "name" : "Cap", "color" : "Purple" }, "sizes" : [ "M" ] } { "_id" : 7, "product" : { "name" : "Shoes", "color" : "Brown" }, "sizes" : [ "S", "M", "L" ] } { "_id" : 8, "product" : { "name" : "Shirt", "color" : "White" }, "sizes" : [ "M", "L", "XL" ] } { "_id" : 9, "product" : { "name" : "Cap", "color" : "Green" }, "sizes" : [ "M", "L" ] }
次のクエリを使用して、製品名に個別の値を返すことができます。
db.runCommand ( { distinct: "products", key: "product.name" } )
結果:
{ "values" : [ "Cap", "Shirt", "Shoes", "Shorts" ], "ok" : 1 }
color
についても同じことができます フィールド。
db.runCommand ( { distinct: "products", key: "product.color" } )
結果:
{ "values" : [ "Brown", "Green", "Purple", "White" ], "ok" : 1 }
配列から個別の値を取得する
distinct
の使用方法は次のとおりです 上記の配列から個別の値を取得するコマンド。
db.runCommand ( { distinct: "products", key: "sizes" } )
結果:
{ "values" : [ "L", "M", "S", "XL", "XS" ], "ok" : 1 }
distinct
を使用する クエリを使用
個別の値を取得するドキュメントを指定するクエリを提供できます。これを行うには、キーの後にクエリを追加します。
例:
db.runCommand ( {
distinct: "products",
key: "product.name",
query: { "sizes": "S" }
} )
結果:
{ "values" : [ "Shirt", "Shoes", "Shorts" ], "ok" : 1 }
詳細情報
distinct
コマンドは、comment
などの他のフィールドも受け入れます 、readConcern
、およびcollation
(これにより、大文字と小文字やアクセント記号の規則など、文字列比較の言語固有の規則を指定できます)。
詳細については、MongoDBのドキュメントを参照してください。