Nilai unik mongodb dalam array

Nilai yang berbeda adalah nilai-nilai dengan duplikat yang berlebihan dihapus. Dengan kata lain, nilai yang berbeda adalah nilai yang unik

Di MongoDB ada beberapa cara untuk mengembalikan nilai yang berbeda dalam kueri. Artikel ini menyajikan 3 cara untuk mengembalikan nilai yang berbeda di mongo shell

Contoh data

Contoh di halaman ini menggunakan koleksi berikut yang disebut 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 }

Metode distinct()

Di MongoDB, metode db.collection.distinct()_ menemukan nilai berbeda untuk bidang tertentu di seluruh koleksi atau tampilan tunggal dan mengembalikan hasilnya dalam larik

Contoh

db.pets.distinct( "type" )
_

Hasil

[ "Bat", "Cat", "Dog" ]

Ketiga nilai ini adalah nilai yang berbeda untuk bidang

db.pets.distinct( "type" )
0 dalam dokumen di atas

Bagian pets hanya menamai koleksi yang akan mengembalikan nilai yang berbeda

Metode db.collection.distinct()_ adalah metode pembungkus shell untuk perintah

db.pets.distinct( "type" )
3 (di bawah)

Perintah db.pets.distinct( "type" )3

Di MongoDB, perintah agregasi

db.pets.distinct( "type" )
_3 menemukan nilai yang berbeda untuk bidang tertentu di seluruh koleksi tunggal

Ini mengembalikan dokumen yang berisi larik dari nilai yang berbeda, serta dokumen yang disematkan dengan statistik kueri dan paket kueri

db.runCommand ( { distinct: "pets", key: "type" } )

Hasil

{ "values" : [ "Bat", "Cat", "Dog" ], "ok" : 1 }
_

Kita dapat melihat bahwa nilai berbeda yang sama dikembalikan, kecuali kali ini ada di dokumen yang juga berisi info lainnya

db.pets.distinct( "type" )6 Operator Agregasi

Bergantung pada kebutuhan Anda, Anda juga dapat menggunakan operator agregasi

db.pets.distinct( "type" )
6 untuk mengembalikan nilai yang berbeda

Contoh

db.pets.aggregate( [ { $group : { _id : "$type" } } ] )

Hasil

{ "_id" : "Cat" }
{ "_id" : "Bat" }
{ "_id" : "Dog" }

Dalam hal ini nilai yang berbeda dikembalikan dalam dokumen terpisah

Pendekatan ini bisa berguna jika Anda mengharapkan hasil yang besar. Jika hasil Anda lebih besar dari ukuran BSON maksimum (16 megabita pada saat penulisan), Anda mungkin perlu menggunakan pendekatan ini

Di MongoDB, metode yang berbeda () menemukan nilai yang berbeda untuk bidang yang diberikan di satu koleksi dan mengembalikan hasilnya dalam sebuah array. Dibutuhkan tiga parameter, yang pertama adalah bidang untuk mengembalikan nilai yang berbeda dan yang lainnya opsional

Pada artikel ini, kami akan menangani cara mengembalikan nilai unik menggunakan metode MongoDB distinct(). Selain itu, mengembalikan nilai unik dalam larik dan bidang juga dibahas

Di MongoDB, Anda mungkin ingin merender atau mengembalikan nilai unik sesekali, dan Anda dapat melakukannya dengan menggunakan metode distinct()

Metode distinct()_ menghasilkan array nilai yang berbeda untuk bidang yang diberikan di semua koleksi atau tampilan dalam satu koleksi atau tampilan dan membantu Anda mengembalikan nilai unik untuk bidang yang ditentukan dalam shell mongo

Fungsi distinct()_ di MongoDB

Sintaksis

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

Di MongoDB, fungsi harus memiliki dua parameter yang diperlukan yang disebut operator bidang dan kueri. Parameter bidang adalah bidang tempat Anda ingin metode distinct() untuk mendapatkan nilai unik

Parameter kueri menentukan dokumen dari mana nilai yang berbeda harus diambil. Anda dapat mengirimkan fungsi parameter opsi agunan

Perhatikan bahwa jika nilai bidang yang ditentukan adalah larik, distinct() memperlakukan setiap elemen larik sebagai nilai terpisah. Misalnya, jika bidang memiliki nilai

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
}
_2, distinct() memperlakukan
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
}
4,
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
}
5, dan
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
}
4 sebagai nilai terpisah

Gunakan Fungsi distinct() untuk Mengembalikan Nilai Unik

Mari gunakan fungsi distinct() untuk mengembalikan nilai unik di MongoDB. Koleksi di bawah ini akan digunakan untuk contoh pertama

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
}

Mengembalikan Nilai Unik atau Berbeda untuk Bidang di MongoDB

Koleksi film di atas mengembalikan nilai unik untuk bidang yang ditentukan dalam contoh ini. Katakanlah Anda menginginkan nilai unik dari bidang peringkat

Pertanyaan

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

Setelah menggunakan kueri di atas, fungsi distinct()_ telah berhasil membantu Anda mengembalikan nilai unik di MongoDB untuk koleksi

Kembalikan Nilai Unik untuk Bidang Tersemat di MongoDB

Dalam contoh ini, menampilkan nilai unik untuk bidang yang disematkan. Namun, koleksi yang digunakan di contoh sebelumnya tidak berisi bidang yang disematkan

Oleh karena itu, koleksi baru akan digunakan, seperti yang ditunjukkan di bawah ini

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"
                ]
        }
}

Kueri berikut dapat mengembalikan nilai unik dari semua bidang yang disematkan dari kumpulan database di atas

Pertanyaan

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

Mengembalikan Nilai Unik untuk Bidang Larik Tertanam

Menggunakan fungsi distinct(), Anda dapat menggunakan koleksi yang sama di atas untuk mengembalikan nilai unik dari bidang larik tersemat menggunakan fungsi distinct()

Pertanyaan

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

Dalam artikel tutorial MongoDB ini, Anda diberikan tampilan mendetail tentang fungsi berbeda dengan koleksi. Mengembalikan nilai unik dalam larik dan bidang atau bidang tersemat juga dijelaskan dengan segmen kode

Bagaimana cara mendapatkan nilai unik dari array di MongoDB?

Untuk mendapatkan nilai unik dan mengabaikan duplikat, gunakan perbedaan() di MongoDB. yang berbeda () menemukan nilai yang berbeda untuk bidang yang ditentukan di seluruh koleksi tunggal dan mengembalikan hasilnya dalam sebuah larik.

Bagaimana cara menetapkan nilai unik di MongoDB?

Untuk membuat indeks unik, gunakan db. koleksi. createIndex() metode dengan opsi unik disetel ke true .

Bagaimana cara menghapus duplikat dari koleksi di MongoDB?

Ide umumnya adalah menggunakan findOne https. //dokumen. mongodb. com/manual/reference/method/db. koleksi. findOne/ untuk mengambil satu id acak dari catatan duplikat dalam koleksi. Hapus semua catatan dalam koleksi selain id-acak yang kami ambil dari opsi findOne

Apa fungsi berbeda di MongoDB?

distinct() menganggap setiap elemen array sebagai nilai terpisah . Misalnya, jika suatu bidang memiliki nilai [ 1, [1], 1 ] , maka db. koleksi. yang berbeda() menganggap 1 , [1] , dan 1 sebagai nilai yang terpisah.