kueri proyeksi adalah kueri tempat Anda menentukan bidang mana yang harus dikembalikan.
Di MongoDB, saat Anda menanyakan koleksi menggunakan db.collection.find()
metode, Anda dapat menentukan bidang mana yang ingin Anda kembalikan.
Anda dapat melakukannya dengan menyertakan nama bidang dalam kueri Anda, dan menambahkan 1
atau 0
di sebelahnya, untuk menentukan apakah itu harus dikembalikan atau tidak. Ini adalah proyeksi parameter. Parameter proyeksi 1
akan menampilkan bidang dan 0
akan menyembunyikannya.
Contoh
Pertama mari kita lakukan kueri tanpa proyeksi (sehingga kita dapat melihat berapa banyak bidang yang dikembalikan):
Tanpa Proyeksi
db.musicians.find( { instrument: "Vocals"} )
Hasil:
{ "_id" : 1, "name" : "Ian Gillan", "instrument" : "Vocals" } { "_id" : 6, "name" : "Jeff Martin", "instrument" : "Vocals", "born" : 1969 }
Dengan Proyeksi
Sekarang, mari gunakan proyeksi untuk hanya menampilkan nama bidang:
db.musicians.find( { instrument: "Vocals" }, { name: 1 } )
Hasil:
{ "_id" : 1, "name" : "Ian Gillan" } { "_id" : 6, "name" : "Jeff Martin" }
Anda akan melihat bahwa _id
bidang disertakan secara otomatis, bahkan jika Anda tidak menentukannya. Anda dapat mengecualikan bidang ini dengan menggunakan 0
menentangnya:
db.musicians.find( { instrument: "Vocals" }, { _id: 0, name: 1 } )
Hasil:
{ "name" : "Ian Gillan" } { "name" : "Jeff Martin" }
Mencampur Penyertaan dan Pengecualian
Anda tidak dapat mencampur 1
s dan 0
s (dengan pengecualian _id
bidang). Jika Anda mencoba menggabungkan penyertaan dan pengecualian, seperti ini:
db.musicians.find( { instrument: "Vocals" }, { name: 1, born: 0 } )
Anda akan mendapatkan kesalahan ini:
Error: error: { "waitedMS" : NumberLong(0), "ok" : 0, "errmsg" : "Projection cannot have a mix of inclusion and exclusion.", "code" : 2 }
Jadi, Anda dapat menyertakan bidang atau mengecualikannya — bukan keduanya.
Berikut ini contoh menentukan bidang dengan pengecualian:
db.musicians.find( { instrument: "Vocals" }, { _id: 0, instrument: 0 } )
Hasil:
{ "name" : "Ian Gillan" } { "name" : "Jeff Martin", "born" : 1969 }