Di MongoDB, distinct
perintah agregasi menemukan nilai yang berbeda untuk bidang tertentu di seluruh koleksi tunggal.
Ini mengembalikan dokumen yang berisi larik nilai yang berbeda, serta dokumen yang disematkan dengan statistik kueri dan rencana kueri.
Nilai yang berbeda adalah nilai dengan duplikat yang berlebihan dihapus. Nilai yang berbeda adalah nilai yang unik. Misalnya, jika Anda memiliki 2 atau 3 dokumen dengan nilai yang sama, distinct
perintah hanya akan mengembalikan satu nilai.
Ada juga db.collection.distinct()
metode, yang merupakan metode pembungkus shell untuk distinct
perintah.
Contoh
Misalkan kita memiliki koleksi yang disebut pets
dengan dokumen berikut.
{ "_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 }
Kita dapat menggunakan distinct
perintah untuk mengembalikan jenis hewan peliharaan yang berbeda.
distinct
perintah menerima koleksi sebagai bidang pertama, dan kunci sebagai yang kedua. Kuncinya adalah bidang untuk mengembalikan nilai yang berbeda.
db.runCommand ( { distinct: "pets", key: "type" } )
Hasil:
{ "values" : [ "Bat", "Cat", "Dog" ], "ok" : 1 }
Dalam contoh ini, meskipun ada empat anjing dan dua kucing dalam koleksi, array hanya berisi masing-masing satu. distinct
perintah menghapus nilai duplikat.
Dokumen asli hanya memiliki satu kelelawar sehingga distinct
perintah tidak mengubah itu – tidak ada nilai duplikat untuk didedupe.
Dokumen Tersemat
Anda dapat menggunakan notasi titik untuk mendapatkan nilai yang berbeda dari bidang yang disematkan
Misalkan kita memiliki koleksi yang disebut products
yang berisi dokumen-dokumen berikut:
{ "_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" ] }
Kita dapat menggunakan kueri berikut untuk mengembalikan nilai yang berbeda untuk nama produk.
db.runCommand ( { distinct: "products", key: "product.name" } )
Hasil:
{ "values" : [ "Cap", "Shirt", "Shoes", "Shorts" ], "ok" : 1 }
Kita dapat melakukan hal yang sama untuk color
lapangan.
db.runCommand ( { distinct: "products", key: "product.color" } )
Hasil:
{ "values" : [ "Brown", "Green", "Purple", "White" ], "ok" : 1 }
Dapatkan Nilai Berbeda dari Array
Berikut cara menggunakan distinct
perintah untuk mendapatkan nilai yang berbeda dari array di atas.
db.runCommand ( { distinct: "products", key: "sizes" } )
Hasil:
{ "values" : [ "L", "M", "S", "XL", "XS" ], "ok" : 1 }
Gunakan distinct
dengan Kueri
Anda dapat memberikan kueri untuk menentukan dokumen yang akan digunakan untuk mengambil nilai yang berbeda. Untuk melakukannya, tambahkan kueri setelah kunci.
Contoh:
db.runCommand ( {
distinct: "products",
key: "product.name",
query: { "sizes": "S" }
} )
Hasil:
{ "values" : [ "Shirt", "Shoes", "Shorts" ], "ok" : 1 }
Informasi Lebih Lanjut
distinct
perintah juga menerima bidang lain, seperti comment
, readConcern
, dan collation
(yang memungkinkan Anda menentukan aturan khusus bahasa untuk perbandingan string, seperti aturan untuk huruf besar dan tanda aksen).
Lihat dokumentasi MongoDB untuk informasi lebih lanjut.