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

Bagaimana Melakukan Operasi Query Dasar di MongoDB

Pada artikel ini, kami akan membahas cara melakukan operasi kueri dasar di MongoDB. Kami memproduksi data dengan kecepatan yang tak tertandingi sekarang mengikuti penyebaran global internet. Karena ini mengharuskan kami untuk mengumpulkan/meminta data yang diperlukan dari database untuk melakukan beberapa jenis analisis, sangat penting bagi kami untuk memilih alat yang tepat untuk melakukan kueri data.

Di sinilah MongoDB masuk, khususnya. MongoDB adalah database tidak terstruktur yang, dalam bentuk dokumen, menyimpan data. Selain itu, MongoDB sangat efektif dalam menangani sejumlah besar data dan merupakan basis data NoSQL yang paling umum digunakan karena menyediakan bahasa kueri yang kaya dan akses data yang serbaguna dan mudah.

Buat Contoh Basis Data

Sebelum memulai, kita akan membuat DB sampel dengan beberapa data sampel untuk melakukan semua operasi.

Kami akan membuat database dengan nama myDB dan akan membuat koleksi dengan nama pesanan . Untuk ini, pernyataannya adalah sebagai berikut.

> use myDB
> db.createCollection("orders")
>

MongoDB tidak menggunakan baris dan kolom. Ini menyimpan data dalam format dokumen. Koleksi adalah sekelompok dokumen.

Anda dapat memeriksa semua koleksi dalam database dengan menggunakan pernyataan berikut.

> use myDB
>show collections
orders
system.indexes
>

Mari kita masukkan beberapa dokumen dengan menggunakan pernyataan berikut.

> db.orders.insert([
	{
		Customer: "abc",
		Address:{"City":"Jaipur","Country":"India"},
		PaymentMode":"Card",
		Email:"[email protected]",
		OrderTotal: 1000.00,
		OrderItems:[
			{"ItemName":"notebook","Price":"150.00","Qty":10},
			{"ItemName":"paper","Price":"10.00","Qty":5},
			{"ItemName":"journal","Price":"200.00","Qty":2},
			{"ItemName":"postcard","Price":"10.00","Qty":500}
		]		
	},
	{
		Customer: "xyz",
		Address:{"City":"Delhi","Country":"India"},
		PaymentMode":"Cash",
		OrderTotal: 800.00,
		OrderItems:[
			{"ItemName":"notebook","Price":"150.00","Qty":5},
			{"ItemName":"paper","Price":"10.00","Qty":5},
			{"ItemName":"postcard","Price":"10.00","Qty":500}
		]		
	},
	{
		Customer: "ron",
		Address:{"City":"New York","Country":"USA"},
		PaymentMode":"Card",
		Email:"[email protected]",
		OrderTotal: 800.00,
		OrderItems:[
			{"ItemName":"notebook","Price":"150.00","Qty":5},
			{"ItemName":"postcard","Price":"10.00","Qty":00}
		]		
	}
])

Dokumen setara dengan baris RDBMS. Tidak perlu memiliki skema yang sama di setiap dokumen. Artinya, dokumen mungkin tidak memiliki bidang yang tidak memiliki nilai apa pun.

Dokumen Kueri

metode find()

Anda perlu menggunakan metode find() untuk menanyakan dokumen dari koleksi MongoDB. Pernyataan berikut akan mengambil semua dokumen dari koleksi.

> db.orders.find()
	{
		"_id" : ObjectId("5dd4e2cc0821d3b44607534c")
		Customer: "abc",
		Address:{"City":"Jaipur","Country":"India"},
		PaymentMode":"Card",
		Email:"[email protected]",
		OrderTotal: 1000.00,
		OrderItems:[
			{"ItemName":"notebook","Price":"150.00","Qty":10},
			{"ItemName":"paper","Price":"10.00","Qty":5},
			{"ItemName":"journal","Price":"200.00","Qty":2},
			{"ItemName":"postcard","Price":"10.00","Qty":500}
		]		
	},
	{
		"_id" : ObjectId("5dd4e2cc0821d3b44607544c"),
		Customer: "xyz",
		Address:{"City":"Delhi","Country":"India"},
		PaymentMode":"Cash",
		OrderTotal: 800.00,
		OrderItems:[
			{"ItemName":"notebook","Price":"150.00","Qty":5},
			{"ItemName":"paper","Price":"10.00","Qty":5},
			{"ItemName":"postcard","Price":"10.00","Qty":500}
		]
	},
	{
		"_id" : ObjectId("5dd4e2cc0821d3b44607644c"),
		Customer: "ron",
		Address:{"City":"New York","Country":"USA"},
		PaymentMode":"Card",
		Email:"[email protected]",
		OrderTotal: 600.00,
		OrderItems:[
			{"ItemName":"notebook","Price":"150.00","Qty":5},
			{"ItemName":"postcard","Price":"10.00","Qty":00}
		]
	}
>

Proyeksi

Jika Anda hanya ingin mengambil bidang yang dipilih, maka Anda dapat menggunakan proyeksi. Pernyataan berikut hanya akan mengambil Pelanggan dan Email lapangan.

> db.orders.find( { }, { Customer: 1, Email: 1 })
	{
		"_id" : ObjectId("5dd4e2cc0821d3b44607534c")
		Customer: "abc",
		Email:"[email protected]"
	},
	{
		"_id" : ObjectId("5dd4e2cc0821d3b44607544c"),
		Customer: "xyz"		
	},
	{
		"_id" : ObjectId("5dd4e2cc0821d3b44607644c"),
		Customer: "ron",
		Email:"[email protected]"		
	}
>

Filter Dokumen dengan Menentukan Kondisi

Sekarang kita akan belajar bagaimana kita bisa mengambil dokumen yang cocok dengan kondisi yang ditentukan. MongoDB menyediakan banyak operator perbandingan untuk ini.

1. $eq Operator

Operator $eq memeriksa kesetaraan nilai bidang dengan nilai yang ditentukan. Untuk mengambil pesanan di mana PaymentMode adalah 'Kartu' Anda dapat menggunakan pernyataan berikut

>db.orders.find( { PaymentMode: { $eq: "Card" } } )

Kueri ini dapat ditulis juga seperti di bawah ini

>db.orders.find( { PaymentMode: "Card" } )

Pernyataan SQL yang serupa adalah sebagai berikut

SELECT * FROM orders WHERE PaymentMode="Card"

Contoh

>db.orders.find( { PaymentMode: "Card" }, { Customer: 1, PaymentMode: 1 } )
	{
		"_id" : ObjectId("5dd4e2cc0821d3b44607534c")
		Customer: "abc",
		PaymentMode":"Card"				
	},
	{
		"_id" : ObjectId("5dd4e2cc0821d3b44607644c"),
		Customer: "ron",
		PaymentMode":"Card"
	}
>

$eq Operator dengan dokumen tersemat

Anda mungkin telah memperhatikan bahwa kami memasukkan dokumen tersemat Alamat di Pesanan koleksi. Jika Anda ingin mengambil pesanan di mana Negara adalah 'India' Anda dapat menggunakan notasi titik seperti pernyataan berikut.

>db.Orders.find( { "Address.Country": { $eq: "India" } } )

Kueri ini dapat ditulis juga seperti di bawah ini

>db.Orders.find( { "Address.Country":"India" } )

Contoh

>db.Orders.find( { "Address.Country": { $eq: "India" } } , { Customer: 1, Address: 1 })
	{
		"_id" : ObjectId("5dd4e2cc0821d3b44607534c")
		Customer: "abc",
		Address:{"City":"Jaipur","Country":"India"}
	},
	{
		"_id" : ObjectId("5dd4e2cc0821d3b44607544c"),
		Customer: "xyz",
		Address:{"City":"Delhi","Country":"India"}
	}
>

$eq Operator dengan larik

Operator $eq akan mengambil semua dokumen jika kondisi yang ditentukan benar untuk item apa pun dalam array. Kami memiliki OrderItems array dalam dokumen. Jika Anda ingin menyaring dokumen di mana 'kertas' juga dipesan maka pernyataannya adalah sebagai berikut.

>db.Orders.find( { "OrderItems.ItemName": { $eq: "paper" } } )

Kueri ini dapat ditulis juga seperti di bawah ini

>db.Orders.find( { "OrderItems.ItemName": "paper"  } )

Contoh

>db.Orders.find( { "OrderItems.ItemName": { $eq: "paper" } } , { Customer: 1, OrderItems: 1 })
	{
		"_id" : ObjectId("5dd4e2cc0821d3b44607534c")
		Customer: "abc",
		OrderItems:[
			{"ItemName":"notebook","Price":"150.00","Qty":10},
			{"ItemName":"paper","Price":"10.00","Qty":5},
			{"ItemName":"journal","Price":"200.00","Qty":2},
			{"ItemName":"postcard","Price":"10.00","Qty":500}
		]		
	},
	{
		"_id" : ObjectId("5dd4e2cc0821d3b44607544c"),
		Customer: "xyz",
		OrderItems:[
			{"ItemName":"notebook","Price":"150.00","Qty":5},
			{"ItemName":"paper","Price":"10.00","Qty":5},
			{"ItemName":"postcard","Price":"10.00","Qty":500}
		]
	}
>

2. $gt Operator

Anda dapat menggunakan operator $gt untuk mengambil dokumen yang nilai bidangnya lebih besar dari nilai yang ditentukan. Pernyataan berikut akan mengambil dokumen di mana OrderTotal lebih besar dari 800.

>db.orders.find( { OrderTotal: { $gt: 800.00 } } )

Pernyataan SQL yang serupa adalah sebagai berikut

SELECT * FROM orders WHERE OrderTotal>800.00

Contoh

>db.Orders.find( { "OrderTotal": { $gt: 800.00 } } , { Customer: 1, OrderTotal: 1 })
	{
		"_id" : ObjectId("5dd4e2cc0821d3b44607534c")
		Customer: "abc",
		OrderTotal: 1000.00
	}
>

3. $gte Operator

Anda dapat menggunakan operator $gte untuk mengambil dokumen di mana nilai bidang lebih besar dari atau sama dengan nilai yang ditentukan. Pernyataan berikut akan mengambil dokumen di mana OrderTotal lebih besar dari atau sama dengan 800.

>db.orders.find( { OrderTotal: { $gte: 800.00 } } )

Pernyataan SQL yang serupa adalah sebagai berikut

SELECT * FROM orders WHERE OrderTotal>=800.00

Contoh

>db.Orders.find( { "OrderTotal": { $gte: 800.00 } } , { Customer: 1, OrderTotal: 1 })
	{
		"_id" : ObjectId("5dd4e2cc0821d3b44607534c")
		Customer: "abc",
		OrderTotal: 1000.00
	},
	{
		"_id" : ObjectId("5dd4e2cc0821d3b44607544c"),
		Customer: "xyz",
		OrderTotal: 800.00
	}
>

4. $lt Operator

Anda dapat menggunakan operator $lt untuk mengambil dokumen di mana nilai bidang kurang dari nilai yang ditentukan. Pernyataan berikut akan mengambil dokumen di mana OrderTotal kurang dari 800.

>db.orders.find( { OrderTotal: { $lt: 800.00 } } )

Pernyataan SQL yang serupa adalah sebagai berikut

SELECT * FROM orders WHERE OrderTotal<800.00

Contoh

>db.Orders.find( { "OrderTotal": { $lt: 800.00 } } , { Customer: 1, OrderTotal: 1 })
	{
		"_id" : ObjectId("5dd4e2cc0821d3b44607644c"),
		Customer: "ron",
		OrderTotal: 600.00
	}
>

4. $lte Operator

Anda dapat menggunakan operator $lte untuk mengambil dokumen di mana nilai bidang kurang dari atau sama dengan nilai yang ditentukan. Pernyataan berikut akan mengambil dokumen di mana OrderTotal kurang dari atau sama dengan 800.

>db.orders.find( { OrderTotal: { $lte: 800.00 } } )

Pernyataan SQL yang serupa adalah sebagai berikut

SELECT * FROM orders WHERE OrderTotal<=800.00

Contoh

>db.Orders.find( { "OrderTotal": { $lte: 800.00 } } , { Customer: 1, OrderTotal: 1 })
	{
		"_id" : ObjectId("5dd4e2cc0821d3b44607544c"),
		Customer: "xyz",
		OrderTotal: 800.00
	},
	{
		"_id" : ObjectId("5dd4e2cc0821d3b44607644c"),
		Customer: "ron",
		OrderTotal: 600.00
	}
>

5. $ne Operator

Anda dapat menggunakan operator $ne untuk mengambil dokumen yang nilai bidangnya tidak sama dengan nilai yang ditentukan.

>db.orders.find( { PaymentMode: { $ne: "Card" } } )

Pernyataan SQL yang serupa adalah sebagai berikut

SELECT * FROM orders WHERE PaymentMode != "Card"

Contoh

>db.Orders.find( { "PaymentMode": { $ne: "Card" } } , { Customer: 1, PaymentMode: 1 })
	{
		"_id" : ObjectId("5dd4e2cc0821d3b44607544c"),
		Customer: "xyz",
		PaymentMode":"Cash"
	}
>

6. $in Operator

Anda dapat menggunakan operator $in untuk mengambil dokumen di mana nilai bidang sama dengan nilai apa pun dalam larik yang ditentukan.

>db.orders.find( { OrderItems.ItemName: { $in: ["journal","paper"] } } )

Contoh

>db.Orders.find( { OrderItems.ItemName: { $in: ["journal","paper"] } } , { Customer: 1, OrderItems: 1 })
	{
		"_id" : ObjectId("5dd4e2cc0821d3b44607534c")
		Customer: "abc",
		OrderItems:[
			{"ItemName":"notebook","Price":"150.00","Qty":10},
			{"ItemName":"paper","Price":"10.00","Qty":5},
			{"ItemName":"journal","Price":"200.00","Qty":2},
			{"ItemName":"postcard","Price":"10.00","Qty":500}
		]		
	},
	{
		"_id" : ObjectId("5dd4e2cc0821d3b44607544c"),
		Customer: "xyz",
		OrderItems:[
			{"ItemName":"notebook","Price":"150.00","Qty":5},
			{"ItemName":"paper","Price":"10.00","Qty":5},
			{"ItemName":"postcard","Price":"10.00","Qty":500}
		]
	}
>

7. $nin Operator

Anda dapat menggunakan operator $nin untuk mengambil dokumen di mana nilai bidang tidak sama dengan nilai apa pun dalam larik yang ditentukan. Itu juga akan memilih dokumen di mana bidang tidak ada.

>db.orders.find( { OrderItems.ItemName: { $nin: ["journal","paper"] } } )

Contoh

>db.Orders.find( { OrderItems.ItemName: { $nin: ["journal","paper"] } } , { Customer: 1, OrderItems: 1 })
	{
		"_id" : ObjectId("5dd4e2cc0821d3b44607644c"),
		Customer: "ron",
		OrderItems:[
			{"ItemName":"notebook","Price":"150.00","Qty":5},
			{"ItemName":"postcard","Price":"10.00","Qty":00}
		]
	}
>

Pengindeksan

Kita tahu bahwa pengindeksan sangat penting jika kita melakukan kueri pada database yang besar. Tanpa pengindeksan, eksekusi kueri bisa mahal. Kita dapat menambahkan indeks menaik sederhana pada satu bidang dengan menggunakan pernyataan berikut.

>db.Orders.createIndex({"Customer":1})

MongoDB membuat indeks unik pada bidang '_id' secara default. Indeks unik akan mencegah penyisipan dua dokumen dengan nilai yang sama untuk bidang itu. Jika Anda ingin membuat indeks unik maka pernyataannya adalah sebagai berikut.

db.Orders.createIndex( { "OrderId": 1 }, { unique: true } )

Kesimpulan

Saya harap Anda mempelajari sesuatu yang baru hari ini, Jika Anda ingin mempelajari lebih banyak hal di MongoDB, berikut ini adalah artikel menarik tentang MongoDB yang Di-Hosting Sendiri. Saya juga mengundang Anda untuk mencoba sendiri dan berbagi pengalaman Anda di bagian komentar. Selanjutnya, jika Anda menghadapi masalah dengan salah satu definisi di atas, jangan ragu untuk bertanya kepada saya di komentar di bawah.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Temukan menggunakan _id tidak berfungsi dengan agregasi

  2. Bagaimana mengembangkan aplikasi untuk MongoDB dan Redpanda menggunakan Docker Compose

  3. Memperbarui Kamus di Mongodb

  4. Di mongoDb, bagaimana Anda menghapus elemen array dengan indeksnya?

  5. $nin dengan $expr