# 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"}}}])
```