OPERATOR LOGIKA MONGODB || DATABASE ADVANCED
OPERATOR LOGIKA MONGODB
Holla teman - teman !! Pada kesempatan kali ini kita akan membahas tentang Operator Logika MongoDB.
Jenis Operator Logika, Contoh, dan Perbandingan dengan Perintah SQL
Operator Logika memungkinkan teman - teman untuk menggabungkan beberapa kondisi untuk memfilter data sesuai dengan kebutuhan teman- teman. Artikel ini akan membahas berbagai jenis Operator Logika MongoDB, memberikan contoh penggunaan, dan membandingkannya dengan perintah SQL yang serupa.
Jenis Operator Logika MongoDB
Ada beberapa jenis Operator Logika yang dapat teman - teman gunakan dalam MongoDB untuk menggabungkan kondisi pencarian. Beberapa di antaranya adalah:
1. $and: Operator ini digunakan untuk menggabungkan beberapa kondisi yang semuanya harus benar. Hasilnya adalah dokumen yang memenuhi semua kondisi.
2. $or: Operator ini digunakan untuk menggabungkan beberapa kondisi, di mana setidaknya satu kondisi harus benar. Hasilnya adalah dokumen yang memenuhi salah satu atau semua kondisi.
3. $not: Operator ini digunakan untuk menggabungkan kondisi yang membalik hasilnya. Dengan kata lain, hasilnya adalah dokumen yang tidak memenuhi kondisi yang diberikan.
4. $nor: Operator ini digunakan untuk menggabungkan beberapa kondisi, di mana tidak satupun dari kondisi yang diberikan harus benar. Hasilnya adalah dokumen yang tidak memenuhi semua kondisi.
Contoh Operator Logika MongoDB
Berikut adalah contoh operator logika yang bisa teman - teman pakai :
- Menggunakan $and:
db.products.find({ $and: [{ price: 899 }, { color: { $in: ["white", "black"] } }] }, { name: 1, price: 1, color: 1 })
Hasil : [ { _id: 2, name: 'xTablet', price: 899, color: [ 'white', 'black', 'purple' ] } ]
2. Menggunakan $or:
db.products.find({ $or: [{ price: 799 }, { price: 899 }] }, { name: 1, price: 1 })
Hasil : [ { _id: 1, name: 'xPhone', price: 799 }, { _id: 2, name: 'xTablet', price: 899 }, { _id: 3, name: 'SmartTablet', price: 899 } ]
db.products.find({ $or: [ { price: {$lt: 699} }, { price: {$gt: 799} } ] }, { name: 1, price: 1 })
Hasil : [ { _id: 2, name: 'xTablet', price: 899 }, { _id: 3, name: 'SmartTablet', price: 899 }, { _id: 5, name: 'SmartPhone', price: 599 } ]
3. Menggunakan $not:
db.products.find({ $or: [ { price: {$lt: 699} }, { price: {$gt: 799} } ] }, { name: 1, price: 1 })
Hasil : [ { _id: 2, name: 'xTablet', price: 899 }, { _id: 3, name: 'SmartTablet', price: 899 }, { _id: 5, name: 'SmartPhone', price: 599 } ]
db.products.find({ price: { $not: { $gt: 699 } } }, { name: 1, price: 1 })
Hasil : [ { _id: 4, name: 'SmartPad', price: 699 }, { _id: 5, name: 'SmartPhone', price: 599 }, { _id: 6, name: 'xWidget' } ]
4. Menggunakan $nor:
db.products.find({ $nor :[ { price: 899}, { color: "gold"} ] }, { name: 1, price: 1, color: 1 })
Hasil : { "_id" : 1, "name" : "xPhone", "price" : 799, "color" : [ "white", "black" ] } { "_id" : 6, "name" : "xWidget", "color" : [ "black" ] }
5. Menggunakan $exist:
db.products.find( { price: { $exists: true } }, { name: 1, price: 1 } )
Hasil : { "_id" : 1, "name" : "xPhone", "price" : 799 } { "_id" : 2, "name" : "xTablet", "price" : 899 } { "_id" : 3, "name" : "SmartTablet", "price" : 899 } { "_id" : 4, "name" : "SmartPad", "price" : 699 } { "_id" : 5, "name" : "SmartPhone", "price" : 599 } { "_id" : 7, "name" : "xReader", "price" : null }
db.products.find({ price: { $exists: true, $gt: 699 } }, { name: 1, price: 1 });
Hasil : { "_id" : 1, "name" : "xPhone", "price" : 799 } { "_id" : 2, "name" : "xTablet", "price" : 899 } { "_id" : 3, "name" : "SmartTablet", "price" : 899 }
db.products.find({ price: { $exists: false } }, { name: 1, price: 1 });
Hasil : { "_id" : 6, "name" : "xWidget" }
Perbandingan dengan Perintah SQL
Untuk memahami lebih baik Operator Logika MongoDB, mari bandingkan dengan perintah SQL yang serupa:
SQL untuk $and:
SELECT * FROM table
WHERE age >= 18 AND gender = 'female';
SQL untuk $or:
SELECT * FROM table
WHERE category = 'Electronics' OR price <= 500;
SQL untuk $not:
SELECT * FROM table
WHERE NOT (age < 18);
SQL untuk $nor:
SELECT * FROM table
WHERE NOT (status = 'active' OR age >= 65);
Kuis
• Buat tabel di MySQL dengan field dan data yang sama dengan contoh diatas
1. Buat databasae baru di MySql :
2. Buat tabel produk dan warna produk dengan mengetik perintah dibawah ini :
3. Setelah tabel selesai dibuat, teman - teman bisa isi datanya sesuai perintah dibawah :
INSERT INTO products (id, name, price, releaseDate, ram, screen, cpu, storage)
VALUES
(1, 'xPhone', 799.00, '2011-05-14', 4, 6.5, 2.66, 64),
(2, 'xTablet', 899.00, '2011-09-01', 16, 9.5, 3.66, 128),
(3, 'SmartTablet', 899.00, '2015-01-14', 12, 9.7, 3.66, 16),
(4, 'SmartPad', 699.00, '2020-05-14', 8, 9.7, 1.66, 128),
(5, 'SmartPhone', 599.00, '2022-09-14', 4, 9.7, 1.66, 128),
(6, 'xWidget', NULL, NULL, 64, 9.7, 3.66, 1024),
(7, 'xReader', NULL, NULL, 64, 6.7, 3.66, 128);
INSERT INTO product_colors (product_id, color)
VALUES
(1, 'white'),
(1, 'black'),
(2, 'white'),
(2, 'black'),
(2, 'purple'),
(3, 'blue'),
(4, 'white'),
(4, 'orange'),
(4, 'gold'),
(4, 'gray'),
(5, 'white'),
(5, 'orange'),
(5, 'gold'),
(5, 'gray'),
(6, 'black'),
(7, 'black'),
(7, 'white');
4. Maka hasil akhirnya akan muncul 2 tabel seperti ini :
• Buat query SQL untuk dapat menampilkan data yang sama dengan contoh diatas
1. Menggunakan $and (SQL):
SELECT name, price, color
FROM products
JOIN product_colors ON products.id = product_colors.product_id
WHERE price = 899
AND color IN ('white', 'black');
2. Menggunakan $or (SQL):
SELECT name, price
FROM products
WHERE price = 799 OR price = 899;
SELECT name, price
FROM products
WHERE price < 699 OR price > 799;
3. Menggunakan $not (SQL):
SELECT id AS _id, name, price
FROM products
WHERE price IS NULL OR NOT (price > 699);
SELECT name
FROM products
WHERE name NOT REGEXP '^Smart+';
4. Menggunakan $nor (SQL):
SELECT name, price, color
FROM products
LEFT JOIN product_colors ON products.id = product_colors.product_id
WHERE (price IS NULL OR price != 899) AND (color IS NULL OR color != 'gold');
5. Menggunakan $exists (SQL):
SELECT name, price
FROM products
WHERE price IS NOT NULL OR price IS NULL;
SELECT name, price
FROM products
WHERE price IS NOT NULL AND price > 699;
SELECT name, price
FROM products
WHERE price IS NULL;
Tidak ada komentar: