MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

MongoDB - Kueri Koleksi

MongoDB menyediakan db.collection.find() metode untuk menanyakan dokumen dalam koleksi.

db.collection.find() memilih dokumen dalam koleksi dan mengembalikan kursor ke dokumen yang dipilih.

Kembalikan semua Dokumen

Contoh ini mengembalikan semua dokumen dari musisi koleksi:

db.musicians.find()

Hasil:

{ "_id" : 1, "name" : "Ian Gillan", "instrument" : "Vocals" }
{ "_id" : 2, "name" : "Ian Paice", "instrument" : "Drums", "born" : 1948 }
{ "_id" : 3, "name" : "Roger Glover", "instrument" : "Bass", "born" : 1945 }
{ "_id" : 4, "name" : "Steve Morse", "instrument" : "Guitar", "born" : 1954 }
{ "_id" : 5, "name" : "Don Airey", "instrument" : "Keyboards", "born" : 1948 }
{ "_id" : 6, "name" : "Jeff Martin", "instrument" : "Vocals", "born" : 1969 }
{ "_id" : 7, "name" : "Jeff Burrows", "instrument" : "Drums", "born" : 1968 }
{ "_id" : 8, "name" : "Stuart Chatwood", "instrument" : "Bass", "born" : 1969 }

Ini mengembalikan semua dokumen karena kami tidak melewatkan parameter apa pun sebagai kriteria pemfilteran.

Kueri di atas adalah versi singkat dari db.musicians.find( {} ) . Dalam kueri di atas, kami menghilangkan tanda kurung kurawal {} . Ini benar-benar valid saat bekerja dengan MongoDB.

Tambahkan Kriteria Pemfilteran

Anda dapat memfilter hasil dengan hanya memberikan kriteria yang Anda minati.

Misalnya, jika kami hanya tertarik dengan Deep Purple dari artis koleksi:

db.artists.find({ artistname : "Deep Purple" })

Hasil:

{ "_id" : ObjectId("5781f85d48ef8c6b3ffb0150"), "artistname" : "Deep Purple", "albums" : [ { "album" : "Machine Head", "year" : 1972, "genre" : "Rock" }, { "album" : "Stormbringer", "year" : 1974, "genre" : "Rock" } ] }

Format Hasil

Anda mungkin menemukan hasil di atas agak sulit untuk dibaca. Dokumen dikembalikan sebagai satu baris teks panjang.

Anda dapat menggunakan pretty() metode untuk memformat hasil agar lebih mudah dibaca.

Cukup tambahkan pretty() sampai akhir, seperti ini:

db.artists.find({ artistname : "Deep Purple" }).pretty()

Hasil:

{
	"_id" : ObjectId("5781f85d48ef8c6b3ffb0150"),
	"artistname" : "Deep Purple",
	"albums" : [
		{
			"album" : "Machine Head",
			"year" : 1972,
			"genre" : "Rock"
		},
		{
			"album" : "Stormbringer",
			"year" : 1974,
			"genre" : "Rock"
		}
	]
}

Opsi Pemfilteran Lainnya

Berikut ini beberapa cara lain untuk memfilter hasil.

Tentukan AND Ketentuan

Anda dapat menentukan bahwa hanya dokumen yang berisi dua atau lebih nilai tertentu yang harus dikembalikan.

Dalam contoh ini, kami menetapkan bahwa hanya musisi yang memainkan drum dan di mana lahir sebelum 1950 harus dikembalikan. Hanya dokumen yang cocok dengan kedua kriteria yang akan dikembalikan.

db.musicians.find( { instrument: "Drums", born: { $lt: 1950 } } )

Hasil:

{ "_id" : 2, "name" : "Ian Paice", "instrument" : "Drums", "born" : 1948 }

Tentukan OR Ketentuan

Anda juga dapat menentukan bahwa salah satu atau nilai lainnya harus benar. Selama salah satu syarat terpenuhi, dokumen akan dikembalikan.

Dalam contoh ini, kami menginginkan dokumen yang berisi musisi yang bermain drum, atau lahir sebelum 1950.

db.musicians.find(
   {
     $or: [ { instrument: "Drums" }, { born: { $lt: 1950 } } ]
   }
)

Hasil:

{ "_id" : 2, "name" : "Ian Paice", "instrument" : "Drums", "born" : 1948 }
{ "_id" : 3, "name" : "Roger Glover", "instrument" : "Bass", "born" : 1945 }
{ "_id" : 5, "name" : "Don Airey", "instrument" : "Keyboards", "born" : 1948 }
{ "_id" : 7, "name" : "Jeff Burrows", "instrument" : "Drums", "born" : 1968 }

$in Operator

$in operator memungkinkan Anda untuk memberikan daftar nilai. Jika dokumen berisi salah satu dari nilai tersebut, itu akan dikembalikan.

Menggunakan contoh berikut, kami mencari semua musisi yang bermain vokal, atau bermain gitar.

db.musicians.find( { instrument: { $in: [ "Vocals", "Guitar" ] } } )

Hasil

{ "_id" : 1, "name" : "Ian Gillan", "instrument" : "Vocals" }
{ "_id" : 4, "name" : "Steve Morse", "instrument" : "Guitar", "born" : 1954 }
{ "_id" : 6, "name" : "Jeff Martin", "instrument" : "Vocals", "born" : 1969 }

Meminta Array Dokumen

Contoh ini menanyakan array dokumen. Ia menemukan album yang dirilis setelah tahun 2000.

db.artists.find(
   {
      albums: {
                $elemMatch: {
                     year: { $gt: 2000 }
                }
      }
   }
).pretty()

Hasil:

{
	"_id" : ObjectId("578217c248ef8c6b3ffb015a"),
	"artistname" : "Robben Ford",
	"albums" : [
		{
			"album" : "Bringing it Back Home",
			"year" : 2013,
			"genre" : "Blues"
		},
		{
			"album" : "Talk to Your Daughter",
			"year" : 1988,
			"genre" : "Blues"
		}
	]
}
{
	"_id" : ObjectId("578217c248ef8c6b3ffb015b"),
	"artistname" : "Snoop Dogg",
	"albums" : [
		{
			"album" : "Tha Doggfather",
			"year" : 1996,
			"genre" : "Rap"
		},
		{
			"album" : "Reincarnated",
			"year" : 2013,
			"genre" : "Reggae"
		}
	]
}

Anda akan melihat bahwa hasil ini juga berisi album dari lebih awal dari tahun 2000. Ini benar — begitulah cara kerja database berorientasi dokumen. Permintaan apa pun akan mengembalikan seluruh dokumen (tetapi hanya dokumen yang cocok dengan kriteria yang ditentukan).

The db.collection.findOne() Metode

Anda dapat menggunakan db.collection.findOne() metode untuk mengembalikan satu dokumen yang memenuhi kriteria kueri yang ditentukan.

Jika beberapa dokumen memenuhi kriteria, hanya yang pertama yang dikembalikan, sebagaimana ditentukan oleh urutan alami dokumen pada disk.

Jadi mencari seluruh koleksi seperti ini:

db.musicians.findOne( )

Hanya akan mengembalikan satu dokumen:

{ "_id" : 1, "name" : "Ian Gillan", "instrument" : "Vocals" }

Jika kita mengubah findOne() untuk find() seperti ini:

db.musicians.find()

Kami melihat sebenarnya ada 8 dokumen dalam koleksi:

{ "_id" : 1, "name" : "Ian Gillan", "instrument" : "Vocals" }
{ "_id" : 2, "name" : "Ian Paice", "instrument" : "Drums", "born" : 1948 }
{ "_id" : 3, "name" : "Roger Glover", "instrument" : "Bass", "born" : 1945 }
{ "_id" : 4, "name" : "Steve Morse", "instrument" : "Guitar", "born" : 1954 }
{ "_id" : 5, "name" : "Don Airey", "instrument" : "Keyboards", "born" : 1948 }
{ "_id" : 6, "name" : "Jeff Martin", "instrument" : "Vocals", "born" : 1969 }
{ "_id" : 7, "name" : "Jeff Burrows", "instrument" : "Drums", "born" : 1968 }
{ "_id" : 8, "name" : "Stuart Chatwood", "instrument" : "Bass", "born" : 1969 }

  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Grup Mongoid Oleh atau grup MongoDb oleh dalam rel

  2. Bagaimana cara melanjutkan penyisipan setelah kesalahan kunci duplikat menggunakan PyMongo

  3. MongoDB mencatat semua pertanyaan

  4. 3 Langkah Sederhana untuk Membuat Cluster Sharded MongoDB

  5. Pengoptimalan kueri MongoDB