Sabtu, 22 Februari 2020

Query kompleks & Fungsi Agregat dalam database MongoDB

STMIK AKAKOM YOGYAKARTA

Prodi : Rekayasa Perangkat Lunak Aplikasi

Pertama buat database
Use toko

Lalu masukan ke dalam database yang telah di buat
Seperti berikut :

db.inventory.insertMany ([
    { item : "jurnal" , jumlah : 25 , size : { h : 14 , w : 21 , uom : "cm" }, status : "A" },
    { item : "notebook" , qty : 50 , size: { h : 8.5 , w : 11 , uom : "in" }, status : "A" },
    { item : "paper" , qty : 100 , size: { h : 8.5 , w : 11 , uom : "in" }, status : "D" },
    { item : "planner" , qty : 75 , size: { h : 22.85 , w : 30 , uom : "cm" }, status : "D" },
    { item : "kartu pos" , jumlah : 45 , size : { h : 10 , w : 15.25 , uom : "cm" }, status : "A" }
 ]);

Pilih Semua Dokumen dalam Koleksi

Untuk memilih semua dokumen dalam koleksi, berikan dokumen kosong sebagai parameter filter kueri ke metode temukan. Parameter filter kueri menentukan kriteria pilih:
db.inventory.find (  {}  )
 
Operasi ini sesuai dengan pernyataan SQL berikut:
 
PILIH  *  DARI  inventory
 
Untuk informasi lebih lanjut tentang sintaks metode, lihat find().

Tentukan Kondisi Kesetaraan

Untuk menentukan kondisi kesetaraan, gunakan <field>:<value>ekspresi dalam dokumen filter kueri :
 {  <  field1  >:  <  value1  >  ,  ...  }
Contoh berikut memilih dari inventorykumpulan semua dokumen statusdengan jumlah yang sama "D":
db.inventory.find({ status : "D" } )
 
Operasi ini sesuai dengan pernyataan SQL berikut:
PILIH  *  DARI  inventory  DIMANA  status  =  "D"
 

Tentukan Kondisi Menggunakan Operator Kueri

Sebuah dokumen Filter permintaan dapat menggunakan operator permintaan untuk menentukan kondisi dalam bentuk berikut:

 {  <  field1  >:  {  <  operator1  >:  <  value1  >  },  ...  }
 
Contoh berikut mengambil semua dokumen dari inventory koleksi di mana status sama dengan "A"atau "D":
db.inventory.find({status : { $ in : [ "A" , "D" ] } } )
 
Catatan
Meskipun Anda dapat mengekspresikan kueri ini menggunakan $or operator, gunakan $in operator daripada $oroperator saat melakukan pemeriksaan kesetaraan di bidang yang sama.
Lihat dokumen Operator Kueri dan Proyeksi untuk daftar lengkap operator kueri MongoDB.

Cocokkan Dokumen Tertanam / Bertumpuk

Untuk menentukan kondisi kesetaraan di lapangan yang tertanam / bersarang dokumen, menggunakan dokumen penyaring permintaan mana adalah dokumen untuk mencocokkan. 
{ <field>: <value> }<value>
Misalnya, kueri berikut memilih semua dokumen yang bidangnya sizesama dengan dokumen :{ h: 14, w: 21, uom: "cm" }
  
db.inventory.find ( {  size  :  {  h : 14,w: 21,uom : "cm"  }} )
 
Kecocokan kesetaraan pada seluruh dokumen yang disematkan memerlukan kecocokan yang tepat dari <value> dokumen yang ditentukan , termasuk urutan bidang. Misalnya, kueri berikut tidak cocok dengan dokumen apa pun dalam inventorykoleksi:
  
db.inventory.find ( {size : { w : 21, h : 14, uom : "cm"  }})
 

Query on Nested Field

Untuk menentukan kondisi kueri pada bidang dalam dokumen tertanam / bersarang, gunakan notasi titik ( "field.nestedField").
Catatan
Saat menanyakan menggunakan notasi titik, bidang dan bidang bertingkat harus berada di dalam tanda kutip.
Contoh berikut memilih semua dokumen di mana bidang uombersarang di sizebidang sama dengan "in":

db.inventory.find ( {"size.uom"  : "in" } )

Sebuah dokumen Filter permintaan dapat menggunakan operator permintaan untuk menentukan kondisi dalam bentuk berikut:

 {<field1>:  {  <operator1>:  <value1>},  ...  }
 
Kueri berikut menggunakan kurang dari operator ( $lt) pada bidang yang hdisematkan di sizebidang:
  

db.inventory.find({"size.h":{ $lt :15}} )



Kueri berikut memilih semua dokumen di mana bidang bersarang hkurang dari 15, bidang bersarang uomsama dengan "in", dan statusbidang sama dengan "D":
db.inventory.find ( { "size.h" : { $lt : 15 } )

Query an Array of Embedded Documents

Halaman ini memberikan contoh dalam:
Halaman ini memberikan contoh operasi kueri pada array dokumen bersarang menggunakan metode db.collection.find() di mongo shell. Contoh di halaman ini menggunakan koleksi inventory . Untuk mengisi koleksi inventory , jalankan yang berikut:
 
db.inventory.insertMany( [
    {item : "jurnal", instock : [ {warehouse : "A", qty : 5 }, 
 {warehouse : "C", qty : 15 }]},
    {item : "notebook", instock : [ {warehouse : "C", qty : 5 }]},
    {item : "paper", instock : [ { warehouse : "A" , qty : 60 }, 
 {warehouse : "B", qty : 15 }]},
    {item : "planner", instock : [ {warehouse : "A", qty : 40},  
{warehouse : "B", qty : 5 }]},
    {item : "kartu pos", instock : [ {warehouse : "B", qty : 15}, 
 {warehouse : "C", qty : 35 }]}
 ]);
 

Permintaan Dokumen yang Disusun dalam Array

Contoh berikut memilih semua dokumen di mana elemen dalam instockarray cocok dengan dokumen yang ditentukan:
db.inventory.find ( { "instock" :{ warehouse :  "A"  , qty : 5 } } )
 
Kecocokan kesetaraan pada seluruh dokumen yang disematkan / disarangkan membutuhkan kecocokan yang tepat dari dokumen yang ditentukan, termasuk urutan bidang. Misalnya, kueri berikut tidak cocok dengan dokumen apa pun dalam inventorykoleksi:
  
db.inventory.find ( { "instock" : {  qty  :  5 , gudang : "A" } } )
 

Tentukan Kondisi Kueri di Bidang dalam Larik Dokumen

Jika Anda tidak tahu posisi indeks dokumen yang bersarang dalam array, gabungkan nama bidang array, dengan titik ( .) dan nama bidang dalam dokumen bersarang.
Contoh berikut memilih semua dokumen di mana instock array memiliki setidaknya satu dokumen tertanam yang berisi bidang qty yang nilainya kurang dari atau sama dengan 20:
 
 db .inventory.find ( {'instock.qty'  :  {  $ lte  :  20} } )
Menggunakan notasi titik , Anda dapat menentukan kondisi kueri untuk bidang dalam dokumen di indeks atau posisi tertentu array. Array menggunakan pengindeksan berbasis nol.
Catatan
Saat meminta menggunakan notasi titik, bidang dan indeks harus berada di dalam tanda kutip.
Contoh berikut memilih semua dokumen di mana instockarray memiliki sebagai elemen pertama dokumen yang berisi bidang qtyyang nilainya kurang dari atau sama dengan 20:
  
db.inventory.find ( {'instock.0.qty'  : { $lte  : 20 } } )
 

Tentukan Beberapa Kondisi untuk Array Dokumen

Saat menentukan kondisi pada lebih dari satu bidang yang bersarang di dalam array dokumen, Anda dapat menentukan kueri sehingga satu dokumen memenuhi kondisi ini atau kombinasi dokumen apa pun (termasuk satu dokumen) dalam array memenuhi persyaratan.
Gunakan $elemMatchoperator untuk menentukan beberapa kriteria pada larik dokumen yang disematkan sehingga setidaknya satu dokumen yang disematkan memenuhi semua kriteria yang ditentukan.
Contoh berikut menanyakan dokumen di mana instockarray memiliki setidaknya satu dokumen tertanam yang berisi bidang qtysama dengan 5dan bidang warehousesama dengan A:
  
db.inventory.find({"instock":{ $elemMatch : {qty:  5  ,gudang : "A"}}})
 
Contoh berikut ini menanyakan dokumen di mana instockarray memiliki setidaknya satu dokumen tertanam yang berisi bidang qtyyang lebih besar dari 10dan kurang dari atau sama dengan 20:

db.inventory.find( {"instock":{ $elemMatch :{qty:{ $gt:10, $lte:20}}}
})
 
Jika kondisi kueri gabungan pada bidang array tidak menggunakan $elemMatch operator, kueri memilih dokumen-dokumen yang array mengandung kombinasi elemen yang memenuhi kondisi.
Misalnya, kueri berikut cocok dengan dokumen di mana dokumen apa pun yang bersarang dalam instockarray memiliki qtybidang lebih besar dari 10dan dokumen apa pun (tetapi tidak harus dokumen tertanam yang sama) dalam array memiliki qtybidang kurang dari atau sama dengan 20:

db.inventory.find ( {"instock.qty":{$ gt : 10  , $lte : 20 }})

Contoh berikut menanyakan dokumen di mana instockarray memiliki setidaknya satu dokumen tertanam yang berisi bidang qtysama dengan 5dan setidaknya satu dokumen tertanam (tetapi tidak harus dokumen tertanam yang sama) yang berisi bidang warehousesama dengan A:
  
db.inventory.find({"instock.qty":5 ,"instock.warehouse":"A"})