- # 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")