---
# System prepended metadata

title: KBaz 6

---

# KBaz 6


# Zadanie 1
Sukces 

# Zadanie 2
Wersja SQL
```sql=
CREATE TABLE Ksiazka
( Ksiazka_ID INT IDENTITY
, ISBN VARCHAR(20)
, Tytul VARCHAR(300)
, Autor VARCHAR(200)
, Rok_Wydania INT
, Cena DECIMAL(10,2)
, Wypozyczona_Ostatni_Miesiac BIT
, CONSTRAINT Ksiazka_PK PRIMARY KEY (Ksiazka_ID)
, CONSTRAINT Ksiazka_UK_ISBN UNIQUE (ISBN)
);

CREATE TABLE Egzemplarz
( Egzemplarz_ID INT IDENTITY
, Sygnatura CHAR(8)
, Ksiazka_ID INT
, CONSTRAINT Egzemplarz_PK PRIMARY KEY (Egzemplarz_ID)
, CONSTRAINT Egzemplarz_UK_Sygnatura UNIQUE (Sygnatura)
, CONSTRAINT Egzemplarz_FK FOREIGN KEY (Ksiazka_ID) REFERENCES Ksiazka (Ksiazka_ID) ON DELETE CASCADE
);

CREATE TABLE Czytelnik
( Czytelnik_ID INT IDENTITY
, PESEL CHAR(11)
, Nazwisko VARCHAR(30)
, Miasto VARCHAR(30)
, Data_Urodzenia DATE
, Ostatnie_Wypozyczenie DATE
, CONSTRAINT Czytelnik_PK PRIMARY KEY (Czytelnik_ID)
, CONSTRAINT Czytelnik_UK_PESEL UNIQUE (PESEL)
);

CREATE TABLE Wypozyczenie
( Wypozyczenie_ID INT IDENTITY
, Czytelnik_ID INT
, Egzemplarz_ID INT
, Data DATE
, Liczba_Dni INT
, CONSTRAINT Wypozyczenie_PK PRIMARY KEY (Wypozyczenie_ID)
, CONSTRAINT Wypozyczenie_FK_Czytelnik FOREIGN KEY (Czytelnik_ID) REFERENCES Czytelnik (Czytelnik_ID) ON DELETE CASCADE
, CONSTRAINT Wypozyczenie_FK_Egzemplarz FOREIGN KEY (Egzemplarz_ID) REFERENCES Egzemplarz (Egzemplarz_ID) ON DELETE CASCADE
);
```

Wersja Mongodb
```javascript=
//Pozycja
{
    _id,
    ISBN,
    Tytul,
    Autor,
    Rok_Wydania,
    Cena,
    Wypozyczona_Ostatni_Miesiac,
    Egzemplarz : {Sygnatura: []}
}

//Czytelnik
{
    _id,
    PESEL,
    Nazwisko,
    Miasto,
    Data_Urodzenia,
    Ostatnie_Wypozyczenie,
    Wypozyczenie :  {
                        Egzemplarz_ID,
                        Data,
                        Liczba_Dni,
                    }
}
```

### Dodawanie nowych danych:
Pozycje
```json=
{
    "_id":0,
    "ISBN": "83-246-0653-X",
    "Tytul" : "Ala ma kota",
    "Autor" : "Alka",
    "Rok_Wydania" : 1998,
    "Cena" : 421,
    "Wypozyczona_Ostatni_Miesiac" : false,
    "Egzemplarz" : {"Sygnatura": ["S0001","S0002"]}
}
```
```json=
{
    "_id":1,
    "ISBN": "83-246-0279-8",
    "Tytul" : "Kot ma Alę",
    "Autor" : "Kocur",
    "Rok_Wydania" : 1999,
    "Cena" : 421,
    "Wypozyczona_Ostatni_Miesiac" : false,
    "Egzemplarz" : {"Sygnatura": ["S0003"]}
}
```
Czytelnicy
```json=
{
    "_id":0,
    "PESEL": "55101011111",
    "Nazwisko" : "Kowalski",
    "Miasto" : "Kaczki",
    "Data_Urodzenia" : "1955-10-10",
    "Ostatnie_Wypozyczenie" : false,
    "Wypozyczenie" :  [{
                        "Egzemplarz_ID" : 0,
                        "Data" : "2000-02-01",
                        "Liczba_Dni": 12
                    },{
                        "Egzemplarz_ID" : 1,
                        "Data" : "2002-02-01",
                        "Liczba_Dni" : 3
                    }]  
}
```
```json=
{
    "_id" :1,
    "PESEL" : "60101033333",
    "Nazwisko" : "Maliniak",
    "Miasto" : "Wrocław",
    "Data_Urodzenia" : "1960-10-10",
    "Ostatnie_Wypozyczenie" : false,
    "Wypozyczenie" :  [{
                        "Egzemplarz_ID" : 1,
                        "Data" : "2002-02-01",
                        "Liczba_Dni" : 8
                    },
                     {
                        "Egzemplarz_ID" : 0,
                        "Data" : "2003-02-01",
                        "Liczba_Dni" : 16
                    }]
}
```

# Zadanie 3

## Pozycja
```javascript=
{
    _id,
    ISBN,
    Tytul,
    Autor,
    Rok_Wydania,
    Cena,
    Wypozyczona_Ostatni_Miesiac,
    Egzemplarz : {Sygnatura: []}
}
```
```json=
{
  $jsonSchema: {
    required : ['ISBN','Tytul','Autor','Rok_Wydania','Cena','Wypozyczona_Ostatni_Miesiac','Egzemplarz'],
    properties: {
      ISBN : {
        bsonType : 'string',
        maxLength : 20
      },
      Tytul :{
        bsonType : 'string',
        maxLength : 300,
        minLength : 1
      },
      Autor : {
        bsonType: 'string',
        maxLength : 200,
        minLength : 1
      },
      Rok_Wydania :{
        bsonType: "int"
      },
      Cena:{
          bsonType : 'int',
          minimum :0
      },
      Wypozyczona_Ostatni_Miesiac:{
        bsonType: 'bool'
      },
      Egzemplarz :{
        bsonType : 'object',
        required : ['Sygnatura'],
        properties :{
          Sybnatura :{
            bsonType : 'array',
            items :{
              bsonType : 'string'
            }
          }
        }
      }
    }
  }
}
```



## Czytelnik
```javascript=
{
    _id,
    PESEL,
    Nazwisko,
    Miasto,
    Data_Urodzenia,
    Ostatnie_Wypozyczenie,
    Wypozyczenie :  {
                        Egzemplarz_ID,
                        Data,
                        Liczba_Dni,
                    }
}
```
```json=
{
   $jsonSchema: {
      required: ['PESEL','Nazwisko','Miasto','Data_Urodzenia','Ostatnie_Wypozyczenie','Wypozyczenie'], 
      properties: {
        PESEL: {
           bsonType : "string",
           pattern : "^\\d{11}$"
        },
        Nazwisko : {
          bsonType : "string",
          pattern : "^[A-Z]{1}[a-ząłó]+$",
          maxLength : 30
        },
        Miasto :{
          bsonType : "string",
          pattern : "^[A-Z]{1}[a-ząłó]+$",
          maxLength : 30
        },
        Data_Urodzenia :{
          bsonType : "string",
          pattern : "^\\d{4}-\\d{2}-\\d{2}$"
        },
        Ostatnie_Wypozyczenie :{
          bsonType: "bool"
        },
        Wypozyczenie :{
          bsonType : "array",
          items :{
            bsonType : "object",
            required: ['Liczba_Dni','Egzemplarz_ID','Data'],
            properties :{
              Liczba_dni :{
                bsonType : 'int',
                minimum : 0
              },
              Egzemplarz_ID:{
                bsonType : 'int',
                minimum : 0
              },
              Data :{
                bsonType : "string",
                pattern : "^\\d{4}-\\d{2}-\\d{2}$"
              }
            }
          }
        }
      }
   }
}
```

# Zadanie 4
## Pobranie listy wszystkich dokumentów, posortowanych
```javascript=
db.Pozycje.find().sort({Tytul:1})
```
## Pobranie listy 2 „środkowych” dokumentów z posortowanej kolekcji (inaczej mówiąc: pobranie wybranej strony),
```javascript=
 db.Test.find().sort().skip(Math.floor(db.Test.find().size()/2)).limit(2)
```
## Pobranie list dokumentów z nałożonym filtrem na atrybuty zagnieżdżonych dokumentów.
```javascript=
db.Pozycje.find({ "Egzemplarz.Sygnatura" : "S0002" })
```

# Zadanie 5
```bash=
sudo mongod --port 10000 --dbpath ./Baza1 --replSet "demo"
sudo mongod --port 20000 --dbpath ./Baza2 --replSet "demo"
sudo mongod --port 30000 --dbpath ./Baza3 --replSet "demo"
```

```
db.books.save({_id:1, title:"Mistrz i Małgorzata"})
db.books.save({_id:2, title:"Wyznania gejszy"})
```

```javascript=
var rsConfig = { _id: "demo", members: [{ _id: 0, host: 'localhost:10000', priority: 10 }, { _id: 1, host: 'localhost:20000' }, { _id: 2, host: 'localhost:30000', arbiterOnly: true }] };

rs.initiate(rsConfig)
```

```
db.getMongo().setReadPref('primaryPreferred')
```

# Zadanie 6

```bash=

sudo mongod --port 10000 --dbpath ./conf --replSet "demo"  --configsvr

rs.initiate()
```


```bash=
sudo mongos --port 20000   --configdb "demo/127.0.0.1:10000"
```

```bash=
sudo mongod --port 30000 --dbpath ./shard --replSet "shard"  --shardsvr

rs.initiate()
```

```
#router
sh.addShard("shard/localhost:30000")
db.createCollection("SomeDB")
use SomeDB
sh.enableSharding("SomeDB")
sh.status()
db.createCollection("SomeCollection")
db.SomeCollection.createIndex({"index":1})
db.SomeCollection.ensureIndex({"index":"hashed"})
sh.shardCollection("SomeDB.SomeCollection", {"index": "hashed"})


db.SomeCollection.getShardDistribution()
```

# Zadanie 7
```javascript=
db.Pozycje.aggregate([{$match : {Cena : {$gt : 200}}}, {$group : { _id : "$Autor", Total : {$sum : "$Cena"}}}])
```