Lompat ke konten Lompat ke sidebar Lompat ke footer

MongoDB : Operator Logika

Jenis Operator Logika, Contoh, dan Perbandingan dengan Perintah SQL

    Operator Logika memungkinkan Anda untuk menggabungkan beberapa kondisi untuk memfilter data sesuai dengan kebutuhan Anda. 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 digunakan 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

1. 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  : 

CREATE TABLE products (
    id INT NOT NULL,
    name VARCHAR(255) NOT NULL,
    price DECIMAL(10, 2),
    releaseDate DATE,
    ram INT,
    screen DECIMAL(4, 2),
    cpu DECIMAL(4, 2),
    storage INT
);

Setelah itu beri akses key pada struktur "id"



CREATE TABLE product_colors (
    product_id INT,
    color VARCHAR(255),
    FOREIGN KEY (product_id) REFERENCES products(id)
);


3. Setelah tabel selesai dibuat, 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;








Posting Komentar untuk "MongoDB : Operator Logika"