Di MongoDB db.collection.find()
metode memilih dokumen dalam koleksi atau tampilan dan mengembalikan kursor ke dokumen yang dipilih..
collection
bagian adalah nama koleksi atau tampilan yang akan dicari.
Anda dapat menggunakannya untuk mengembalikan semua dokumen, hanya beberapa, atau hanya satu dokumen. Anda juga dapat menentukan bidang mana yang harus dikembalikan.
Penting untuk dicatat bahwa itu tidak benar-benar mengembalikan dokumen. Itu hanya mengembalikan kursor ke dokumen. Karena itu, lebih mudah untuk mengatakan bahwa itu “mengembalikan dokumen”, dan biasanya dirujuk sedemikian rupa – termasuk dalam artikel ini
Kembalikan Semua Dokumen
Berikut ini contoh untuk didemonstrasikan.
db.pets.find()
Hasil:
{ "_id" :1, "name" :"Wag", "type" :"Dog", "weight" :20 }{ "_id" :2, "name" :"Bark", "type" :"Anjing", "berat" :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 }Di sini, kami menggunakan
find()
metode untuk mengembalikan semua dokumen daripets
koleksi. Kami tahu bahwa ini mengembalikan semua dokumen karena kami tidak memberikan kriteria pemfilteran apa pun. Faktanya, kami tidak memberikan argumen apa pun.Saat dipanggil tanpa argumen,
find()
mengembalikan semua dokumen dari koleksi dan mengembalikan semua bidang untuk dokumen.Cara lain untuk melakukan hal di atas adalah seperti ini:
db.pets.find({})
Dalam hal ini kami melewati dokumen kosong.
Dengan menambahkan ke dokumen kosong ini, kita dapat mulai memfilter hasilnya.
Filter Hasil
Sintaks sebenarnya dari
find()
seperti ini:db.collection.find(query, projection)
Ini berarti Anda dapat meneruskan kueri sebagai argumen pertama, dan proyeksi sebagai argumen kedua.
Jika Anda meneruskan kueri, kueri tersebut digunakan untuk memfilter hasil. Kueri adalah dokumen yang berisi operator kueri. Seperti yang kita lihat pada contoh sebelumnya, dokumen kosong mengembalikan semua dokumen.
Mari kita persempit hasilnya menjadi subset dokumen dalam koleksi.
db.pets.find({"type":"Dog"})
Hasil:
{ "_id" :1, "name" :"Wag", "type" :"Dog", "weight" :20 }{ "_id" :2, "name" :"Bark", "type" :"Anjing", "berat" :10 }Ini mempersempit hasil menjadi hanya dokumen yang memiliki
type
bidang dengan nilaiDog
.Dalam hal ini, kami hanya melewatkan dokumen sebagai kriteria pemfilteran.
Anda juga dapat menggunakan operator kueri. Ini memungkinkan Anda untuk menerapkan kriteria yang lebih spesifik ke kueri Anda.
Contoh:
db.pets.find({"weight": { $lt: 10 }})
Hasil:
{ "_id" :3, "name" :"Meow", "type" :"Cat", "weight" :7 }{ "_id" :4, "name" :"Scratch", "type" :"Cat", "weight" :8 }{ "_id" :5, "name" :"Bruce", "type" :"Bat", "weight" :3 }Dokumen Tersemat
Jika Anda memiliki dokumen yang berisi dokumen yang disematkan, Anda dapat menggunakan metode berikut untuk melakukan kueri data dalam dokumen yang disematkan.
- Notasi titik (mis.
field.nestedfield: <value>
) - Formulir bertingkat (mis. {
field: { nestedfield: <value> } }
). Perhatikan bahwa opsi ini hanya tersedia dari MongoDB 4.4.
Misalkan kita menyisipkan dokumen berikut.
db.pets.insertOne({ "_id" :6, "name" :"Fetch", "type" :"Dog", "specs" :{ "height" :400, "weight" :15, " warna" :"coklat" }})
Kita dapat menggunakan notasi titik untuk membuat kueri di dalam dokumen yang disematkan.
db.pets.find({ "specs.height": 400 })
Hasil:
{ "_id" :6, "name" :"Fetch", "type" :"Dog", "specs" :{ "height" :400, "weight" :15, "color" :"brown" } }
Kueri berikut mengembalikan dokumen yang sama, kecuali kali ini kami mereferensikan dokumen yang disematkan menggunakan formulir bersarang.
db.pets.find({
"specs" : {
"height" : 400,
"weight" : 15,
"color" : "brown"
}
})
Hasil:
{ "_id" :6, "name" :"Fetch", "type" :"Dog", "specs" :{ "height" :400, "weight" :15, "color" :"brown" } }
Saat menggunakan formulir bersarang, kueri harus sama persis dengan seluruh dokumen yang disematkan. Misalnya, kueri berikut tidak cocok:
db.pets.find({
"specs" : {
"height" : 400
}
})
Format Hasil
Hasil contoh sebelumnya dikembalikan dalam satu baris. Anda dapat menggunakan cursor.pretty()
metode untuk mengonfigurasi kursor agar menampilkan hasil dalam format yang lebih mudah dibaca.
Untuk menggunakan pretty()
metode, tambahkan ke find()
metode.
Contoh:
db.pets.find({ "_id": 6 }).pretty()
Hasil:
{ "_id" :6, "name" :"Fetch", "type" :"Dog", "specs" :{ "height" :400, "weight" :15, "color" :"brown" }}
Array
Anda dapat mereferensikan data dalam array dengan mereferensikan elemen array berdasarkan indeks atau nilainya.
Misalkan kita memasukkan dokumen berikut:
db.pets.insertOne({ "_id" :7, "name" :"Jake", "type" :"Anjing", "awards" :[ "Anjing Teratas", "Anjing Terbaik", "Anjing Terbesar" " ]})
Jika kami ingin menemukan semua anjing dengan penghargaan Top Dog, kami dapat menulis kueri berikut (yang akan mengembalikan anjing di atas).
db.pets.find({
"awards": "Top Dog"
}).pretty()
Hasil:
{ "_id" :7, "name" :"Jake", "type" :"Anjing", "awards" :[ "Anjing Teratas", "Anjing Terbaik", "Anjing Terbesar" ]}
Anda juga dapat menentukan indeks elemen, seperti ini:
db.pets.find({
"awards.0": "Top Dog"
}).pretty()
Melakukan itu mengharuskan nilai yang ditentukan berada pada indeks yang ditentukan. Oleh karena itu, kueri berikut tidak mengembalikan anjing yang sama.
db.pets.find({
"awards.1": "Top Dog"
}).pretty()
Perhatikan bahwa array berbasis nol, jadi indeks 0 menentukan elemen pertama, 1 menentukan elemen kedua, dan seterusnya.
Proyeksi
Secara default, semua bidang dokumen dikembalikan saat Anda menggunakan find()
. Namun Anda dapat menggunakan proyeksi untuk mengurangi jumlah kolom yang ditampilkan jika diperlukan.
Anda mungkin ingat bahwa sintaks untuk find()
seperti ini:
db.collection.find(query, projection)
Dimana query
memberikan kriteria pemfilteran (yang telah kami lakukan dalam contoh di atas), dan projection
adalah proyeksi opsional yang menentukan bidang mana yang akan dikembalikan dari dokumen yang cocok. Oleh karena itu, jika kita ingin menggunakan proyeksi, kita cukup meletakkannya setelah query.
Saat menggunakan proyeksi, Anda dapat menentukan bidang yang akan disertakan , bidang yang akan dikecualikan , atau keduanya. Untuk melakukannya, buat daftar nama bidang dan salah satu 1
(untuk memasukkannya) atau 0
(untuk mengecualikannya).
Sekarang, koleksi kami berisi dokumen-dokumen berikut:
{ "_id" :1, "name" :"Wag", "type" :"Dog", "weight" :20 }{ "_id" :2, "name" :"Bark", "type" :"Anjing", "berat" :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" :"Anjing", "specs" :{ "height" :400, "weight" :15, "color" :"brown" } }{ "_id " :7, "name" :"Jake", "type" :"Anjing", "penghargaan" :[ "Anjing Teratas", "Anjing Terbaik", "Anjing Terbesar" ] }
Berikut adalah contoh penggunaan proyeksi untuk menentukan bidang yang akan disertakan:
db.pets.find({}, { name: 1, type: 1 })
Hasil:
{ "_id" :1, "name" :"Wag", "type" :"Anjing" }{ "_id" :2, "name" :"Bark", "type" :"Anjing" }{ "_id" :3, "name" :"Meow", "type" :"Cat" }{ "_id" :4, "name" :"Scratch", "type" :"Cat" }{ "_id" :5, "name" :"Bruce", "type" :"Bat" }{ "_id" :6, "name" :"Fetch", "type" :"Anjing" }{ "_id" :7, "name " :"Jake", "type" :"Anjing" }
Perhatikan bahwa _id
bidang dikembalikan meskipun kami tidak memasukkannya ke dalam proyeksi kami. Bidang ini merupakan pengecualian, dan disertakan secara default.
Jika Anda tidak menginginkan _id
untuk dikembalikan, Anda harus mengecualikannya secara eksplisit.
db.pets.find({}, { _id: 0, name: 1, type: 1 })
Hasil:
{ "name" :"Wag", "type" :"Anjing" }{ "name" :"Bark", "type" :"Anjing" }{ "name" :"Meow", "type" :"Cat" }{ "name" :"Scratch", "type" :"Cat" }{ "name" :"Bruce", "type" :"Bat" }{ "name" :"Fetch", "type" :"Anjing" }{ "nama" :"Jake", "type" :"Anjing" }
Berikut contoh lain, kali ini kami hanya menentukan bidang mana yang akan dikecualikan.
db.pets.find({}, { _id: 0, weight: 0, specs: 0, awards: 0 })
Hasil:
{ "name" :"Wag", "type" :"Anjing" }{ "name" :"Bark", "type" :"Anjing" }{ "name" :"Meow", "type" :"Cat" }{ "name" :"Scratch", "type" :"Cat" }{ "name" :"Bruce", "type" :"Bat" }{ "name" :"Fetch", "type" :"Anjing" }{ "nama" :"Jake", "type" :"Anjing" }
Proyeksi Lebih Banyak
Ada berbagai hal lain yang dapat Anda lakukan dengan proyeksi. Misalnya, mulai dari MongDB 4.4 Anda dapat menggunakan ekspresi agregat untuk menentukan nilai bidang yang diproyeksikan.
Contoh:
db.pets.find({}, {
"_id": 0,
"n": "$name",
"t": "$type",
"w": "$weight"
})
Hasil:
{ "n" :"Wag", "t" :"Anjing", "w" :20 }{ "n" :"Kulit", "t" :"Anjing", "w" :10 }{ "n" :"Meow", "t" :"Kucing", "w" :7 }{ "n" :"Gores", "t" :"Kucing", "w" :8 }{ "n" :"Bruce", "t" :"Bat", "w" :3 }{ "n" :"Ambil", "t" :"Anjing" }{ "n" :"Jake", "t" :"Anjing " }
Di sini, kami menamai ulang nama bidang. Kami melakukan ini dengan menentukan nama baru untuk setiap bidang sebagai string literal, menggunakan $fieldName
sintaks untuk menampilkan nilai bidang itu. Hasilnya sedikit seperti menggunakan alias dalam SQL.
Informasi Lebih Lanjut
Lihat dokumentasi MongoDB untuk informasi lebih lanjut.