# Zadanie 1 # Utwórz kolekcję dokumentów o nazwie Film, a następnie utwórz n dokumentów w tej kolekcji. Każdy z # dokumentów powinien być opisany przez następujące pola: # • tytuł # • reżyser # • rok produkcji # • średnia ocena filmu (w skali od 1 do 10) # • producent – jako tablica dokumentów, każdy z dokumentów tej tablicy powinien być opisany poprzez pola: # nazwa producenta, kraj, oraz waga, która będzie określać wagę producenta (im niższa wartość tej wagi, tym # ważniejszą rolę pełnił producent w czasie powstawania filmu). # • oceny: tablica, która zwiera 3 ostatnie oceny filmu, każdy element tablicy to dokument z polami: data oceny # oraz wartość oceny (w zakresie od 1 do 10). db.createCollection("Film") db.Film.insert([ { tytul: 'Back to the Future', rezyser: 'Robert Zemeckis', rok_produkcji: 1985, srednia_ocena: 7.4, producent: [ { nazwa_producenta: 'Neil Canton', kraj: 'USA', waga: 1, }, { nazwa_producenta: 'Bob Gale', kraj: 'USA', waga: 2, }, { nazwa_producenta: 'Kathleen Kennedy ', kraj: 'USA', waga: 3, } ], oceny: [ { data_oceny: '21.5.2015', wartosc: 6, }, { data_oceny: '15.3.2016', wartosc: 8, }, { data_oceny: '23.4.2016', wartosc: 7, } ] }, { tytul: 'The Bourne Ultimatum', rezyser: 'Paul Greengrass', rok_produkcji: 2007, srednia_ocena: 7.8, producent: [ { nazwa_producenta: 'MP BETA Productions', kraj: 'USA', waga: 2, }, { nazwa_producenta: 'The Kennedy/Marshall Company', kraj: 'USA', waga: 2, }, { nazwa_producenta: 'Ludlum Entertainment', kraj: 'USA', waga: 2, } ], oceny: [ { data_oceny: '1.1.2016', wartosc: 6, }, { data_oceny: '21.2.2016', wartosc: 9, }, { data_oceny: '29.4.2016', wartosc: 8, } ] }, { tytul: 'The Lord of the Rings: The Fellowship of the Ring', rezyser: 'Peter Jackson', rok_produkcji: 2001, srednia_ocena: 8.0, producent: [ { nazwa_producenta: 'WingNut Films', kraj: 'USA', waga: 1, }, { nazwa_producenta: 'The Saul Zaentz Company', kraj: 'New Zealand', waga: 2, }, ], oceny: [ { data_oceny: '24.12.2015', wartosc: 5, }, { data_oceny: '3.2.2016', wartosc: 10, }, { data_oceny: '21.4.2016', wartosc: 8, } ] }, ]) db.createCollection("Film") db.Film.insert([ { tytul: 'Back to the Future', rezyser: 'Robert Zemeckis', rok_produkcji: 1985, srednia_ocena: 7.4, producent: [ { nazwa_producenta: 'Neil Canton', kraj: 'USA', waga: 1, }, { nazwa_producenta: 'Bob Gale', kraj: 'USA', waga: 2, }, { nazwa_producenta: 'Kathleen Kennedy ', kraj: 'USA', waga: 3, } ], oceny: [ { data_oceny: Date(), wartosc: 6, }, { data_oceny: Date(), wartosc: 8, }, { data_oceny: Date(), wartosc: 7, } ] }, { tytul: 'The Bourne Ultimatum', rezyser: 'Paul Greengrass', rok_produkcji: 2001, srednia_ocena: 7.8, producent: [ { nazwa_producenta: 'MP BETA Productions', kraj: 'USA', waga: 2, }, { nazwa_producenta: 'The Kennedy/Marshall Company', kraj: 'USA', waga: 2, }, { nazwa_producenta: 'Ludlum Entertainment', kraj: 'USA', waga: 2, } ], oceny: [ { data_oceny: Date(), wartosc: 6, }, { data_oceny: Date(), wartosc: 9, }, { data_oceny: Date(), wartosc: 8, } ] }, { tytul: 'The Lord of the Rings: The Fellowship of the Ring', rezyser: 'Peter Jackson', rok_produkcji: 2001, srednia_ocena: 8.0, producent: [ { nazwa_producenta: 'WingNut Films', kraj: 'USA', waga: 1, }, { nazwa_producenta: 'The Saul Zaentz Company', kraj: 'New Zealand', waga: 2, }, ], oceny: [ { data_oceny: Date(), wartosc: 5, }, { data_oceny: Date(), wartosc: 10, }, { data_oceny: Date(), wartosc: 8, } ] }, ]) # Zadanie 2 # Wypisz zawartość kolekcji Film. Wypisując dokumenty tej kolekcji uporządkuj je malejąco według średniej oceny. # Dodatkowo dodaj polecenie forEach(printjson) or pretty(), które pozwoli na wyświetlenie dokumentu # w widoku dokumentu JSON. db.Film.find().sort( { srednia_ocena: -1 } ).pretty() # Zadanie 3 # Wybierz wszystkie dokumenty z kolekcji Film, które były wyprodukowane po roku XXXX. Zwracane dokumenty # powinny zawierać tylko tytuł i rok produkcji. db.Film.find( { rok_produkcji: { $gt: 2000 } }, { tytul: 1, rok_produkcji: 1 } ).pretty() # Zadanie 4 # Do dokumentu opisującego film o nazwie X dodaj dwie oceny filmu (wartość daty oceny powinna stanowić bieżąca # data). Uwaga: w tablicy oceny powinny się znaleźć tylko 3 ostatnie oceny. db.Film.update( { tytul: 'The Lord of the Rings: The Fellowship of the Ring' }, { $push: { oceny: { $each: [ { data_oceny: Date(), wartosc: 10 }, { data_oceny: Date(), wartosc: 3 } ], $sort: { data_oceny: -1 }, $slice: 3 } } } ) # Zadanie 5 # Do wybranych dokumentow dodaj pole rodzaj, które będzie tablicą łańcuchów. Tablica powinna zawierać rodzaj # filmu (komedia, dramat, ect..). db.Film.update( { tytul: 'The Bourne Ultimatum' }, { $set: { rodzaj: ['sensacyjny', 'akcja'] } } ) db.Film.update( { tytul: 'The Lord of the Rings: The Fellowship of the Ring' }, { $set: { rodzaj: ['fantasy', 'przygodowy'] } } ) # Zadanie 6 # Wyznacz ile filmów jest produkowanych w roku. Dokument wynikowy powinien zawierać rok produkcji i liczbę # filmów. Wyświetl wynik w porządku malejącym względem liczby filmów. db.Film.aggregate([ {$group: {_id : "$rok_produkcji", number: { $sum : 1}}}, {$sort: {number: -1}} ]) # Dla każdego producenta wyznaczyć liczbę filmów jakie wyprodukował. Dokument wynikowy powinien składać # się z dwóch pól: _id z wartością reprezentującą nazwę producenta oraz liczba, określającą liczbę filmów db.Film.aggregate( {$unwind: "$producent"}, {$group: {_id:"$producent.nazwa_producenta", liczba_filmow: {$sum: 1}}} ) # Zadanie 8 # Z kolekcji Film usuń te filmy, których średnia ocena jest niższa niż 2. db.Film.remove( { srednia_ocena: { $lt: 8 } } ) # Zadanie 9 # Utwórz indeks z porządkiem malejącym dla pola, które reprezentuje średnią ocenę filmu. db.Film.ensureIndex({srednia_ocena: -1}) # Zadanie 10 # Utwórz indeks kompozytowy składający się z dwóch pól: rok produkcji oraz średniej oceny filmu (rok produkcji: # porządek rosnący, średnia: malejący). db.Film.ensureIndex({rok_produkcji: 1, srednia_ocena: -1}) # Zadanie 11 # Utwórz indeks typu multikey dla pola waga w tablicy producent (dokument z kolekcji Film). Indeks powinien być # malejący. db.Film.ensureIndex({"producent.waga": -1}) #do sprawdzenia zapytan db.Baza.....jakies_funkcje().....explain("executionStats")