Dalam MongoDB saya, saya memiliki koleksi siswa dengan 10 catatan memiliki bidang name
dan roll
. Salah satu catatan dari koleksi ini adalah:
{
"_id" : ObjectId("53d9feff55d6b4dd1171dd9e"),
"name" : "Swati",
"roll" : "80",
}
Saya ingin mengambil bidang roll
hanya untuk semua 10 catatan dalam koleksi seperti yang akan kami lakukan dalam database tradisional dengan menggunakan:
SELECT roll FROM student
Saya telah menelusuri banyak blog tetapi semuanya menghasilkan kueri yang harus memiliki WHERE
klausul di dalamnya, misalnya:
db.students.find({ "roll": { $gt: 70 })
Kueri setara dengan:
SELECT * FROM student WHERE roll > 70
Persyaratan saya adalah menemukan satu kunci saja tanpa syarat apa pun. Jadi, apa operasi permintaan untuk itu.
mongodb
projection
Shipra Swati
sumber
sumber
Jawaban:
Dari dokumen MongoDB :
Dalam contoh ini dari orang-orang di Mongo, dokumen kembali hanya akan berisi bidang
item
,qty
dan_id
.Dengan demikian, Anda harus dapat mengeluarkan pernyataan seperti:
Pernyataan di atas akan memilih semua dokumen dalam koleksi siswa, dan dokumen yang dikembalikan hanya akan mengembalikan
roll
bidang (dan mengecualikan_id
).Jika kami tidak menyebutkan
_id:0
bidang yang dikembalikan akanroll
dan_id
. Kolom '_id' selalu ditampilkan secara default. Jadi kita perlu menyebutkan secara eksplisit_id:0
bersamaroll
.sumber
0
untuk 9 bidang tersebut? Sunting: Nevermind, kecuali_id
ie{field_I_want:1, _id:0}
sepertinya berfungsiWith the exception of the _id field, you cannot combine inclusion and exclusion statements in projection documents.
Ini mungkin menarik bagi sebagian dari Anda. ( sumber )dapatkan semua data dari tabel
dapatkan semua data dari tabel tanpa _id
dapatkan semua data dari satu bidang dengan _id
dapatkan semua data dari satu bidang tanpa _id
menemukan data yang ditentukan menggunakan klausa mana
menemukan data menggunakan klausa mana dan lebih besar dari kondisi
menemukan data menggunakan klausa mana dan lebih besar atau sama dengan kondisi
menemukan data menggunakan klausa mana dan kurang dari atau sama dengan kondisi
menemukan data menggunakan klausa mana dan kurang dari kondisi
sumber
db.student.find({}, {_id:0})
Terima kasih atas bantuannya.Saya pikir mattingly890 memiliki jawaban yang benar, berikut adalah contoh lain bersama dengan pola / perintah
db.collection.find( {}, {your_key:1, _id:0})
sumber
Ini dia, 3 cara melakukan, Terpendek untuk membosankan:
Untuk menghapus
-
operator bidang gunakan tertentu :sumber
Hanya untuk tujuan pendidikan Anda juga bisa melakukannya dengan salah satu cara berikut:
1.
2.
`
sumber
Coba kueri berikut:
Semoga ini membantu!!
sumber
Dalam contoh Anda, Anda dapat melakukan sesuatu seperti:
Proyeksi
CATATAN
BACA LEBIH LAJUT
sumber
Sementara jawaban gowtham selesai, perlu dicatat bahwa perintah-perintah itu mungkin berbeda dari pada API ke yang lain (bagi mereka yang tidak menggunakan shell mongo).
Silakan merujuk ke tautan dokumentasi untuk info terperinci.
Nodejs , misalnya, memiliki metode yang disebut `proyeksi yang akan Anda tambahkan ke fungsi find Anda untuk diproyeksikan.
Mengikuti set contoh yang sama, perintah seperti berikut dapat digunakan dengan Node:
db.student.find({}).project({roll:1})
Atau
db.student.find({}).project({roll:1, _id: 0})
dan seterusnya.
Sekali lagi untuk pengguna nodejs, jangan lupa (apa yang harus Anda ketahui jika Anda menggunakan API ini sebelumnya) untuk digunakan
toArray
untuk menambahkan.then
perintah Anda .sumber
Untuk pemahaman yang lebih baik saya telah menulis permintaan MySQL yang serupa.
sumber
Ini bekerja untuk saya,
tidak ada kondisi di mana klausa yaitu, di dalam kurung kurawal pertama. di dalam kurung kurawal berikutnya: daftar nama bidang proyeksi yang akan dibutuhkan dalam hasil dan 1 menunjukkan bidang tertentu adalah bagian dari hasil kueri
sumber
sumber
Kueri untuk MongoDB di sini biayanya adalah pengumpulan dan deskripsi adalah bidang.
sumber
Jika Anda ingin mengambil "gulungan" bidang hanya untuk semua 10 catatan dalam koleksi. Lalu coba ini.
Dalam MongoDb:
Dalam Sql:
sumber
Saya hanya ingin menambahkan jawaban bahwa jika Anda ingin menampilkan bidang yang bersarang di objek lain, Anda dapat menggunakan sintaks berikut
db.collection.find( {}, {{'object.key': true}})
Di sini kunci ada di dalam objek bernama objek
sumber
Ini setara dengan -
db.student.find ({}, {"roll": 1, "name": 1, "_id": 0})
Ini setara dengan -
sumber
Gunakan Query seperti ini di shell:
1. Gunakan
database_name
2. Yang mengembalikan hanya aset informasi bidang tertentu saat cocok,
_id:0
menentukan untuk tidak menampilkan ID dalam hasilsumber
Dalam mongodb 3.4 kita dapat menggunakan logika di bawah ini, saya tidak yakin tentang versi sebelumnya
pilih roll dari student ==> db.student.find (! {}, {roll: 1})
logika di atas membantu mendefinisikan beberapa kolom (jika kurang)
sumber
Menggunakan Studio 3T untuk MongoDB, jika saya menggunakannya
.find({}, { _id: 0, roll: true })
masih mengembalikan array objek dengan_id
properti kosong .Menggunakan JavaScript
map
membantu saya untuk hanya mengambilroll
properti yang diinginkan sebagai array string:sumber
Tidak yakin ini menjawab pertanyaan, tetapi saya yakin ada baiknya disebutkan di sini. Ada satu cara lagi untuk memilih bidang tunggal (dan bukan multipel) menggunakan
db.collection_name.distinct();
misalnya,
db.student.distinct('roll',{});
Atau, cara ke-2: Menggunakan
db.collection_name.find().forEach();
(beberapa bidang dapat dipilih di sini dengan gabungan)misalnya,
db.collection_name.find().forEach(function(c1){print(c1.roll);});
sumber