#### {% title "CouchDB — Futon" %} # CouchDB — Futon Graficzny interfejs do CouchDB jest dostępny z URI: http://127.0.0.1:5984/_utils/ albo: http://localhost:5984/_utils/ Korzystamy z nakładki Futon aby utworzyć i usunąć bazę danych, dodajemy i usuwamy dokument z bazy danych, dodajemy i usuwamy załącznik. Tworzymy tymczasowy widok. ## Tworzymy bazę i dodajemy do niej dokumenty Tworzymy prostą bazę danych *sprawdziany*: curl -X PUT http://127.0.0.1:5984/sprawdziany w której będziemy zapisywać takie dokumenty: nazwa: "jakie?" wyniki: { "login1":wynik1, ...} Dodajemy kilka dokumentów do bazy danych. Tak to można zrobić z wiersza poleceń: curl -X POST -d @sprawdziany.json http://127.0.0.1:5984/sprawdziany/_bulk_docs gdzie w pliku *sprawdziany.json* wpisaliśmy: :::json { "docs": [ {"_id":"1", "nazwa":"html", "wyniki":{"jacek":10, "agatka":20}}, {"_id":"2", "nazwa":"css", "wyniki":{"jacek":1, "agatka":12}}, {"_id":"3", "nazwa":"js", "wyniki":{"jacek":1, "agatka":12}} ] } Możemy też dodać kilka dokumentów, korzystając z *Futona*. **Jak?** ## Tymczasowe widoki Tutaj: http://127.0.0.1:5984/_utils/index.html jest lista baz. A tutaj baza *sprawdziany*: http://127.0.0.1:5984/_utils/database.html?sprawdziany Tworzymy widok tymczasowy (lista rozwijana, prawy górny róg): wybieramy **Temporary view**. Domyślny widok definiuje funkcja: :::javascript function(doc) { emit(null, doc); } Uruchamiamy wpisaną *Map Function*. Czy można odgadnąć czym jest argument *doc* tej funkcji? W okienku *View Code* wpisujemy naszą pierwszą *Map Function*: :::javascript function(doc) { var login, wynik, value; if (doc.nazwa && doc.wyniki) { for (login in doc.wyniki) { wynik = doc.wyniki[login]; value = [login, doc.nazwa, wynik]; emit(wynik, value); } } } Sortowanie po wynikach. Jak posortować po *loginach*? (proste) Druga funkcja map: :::javascript function(doc) { var wynik, key; if (doc.nazwa && doc.wyniki) { for (var login in doc.wyniki) { wynik = doc.wyniki[login]; key = [doc.nazwa, wynik]; emit(key, login); } } } Teraz sortowanie jest po `[doc.nazwa, wynik]`. Co to oznacza? ## Konfiguracja Jeśli w konfiguracji **httpd > bind address** zmienimy 127.0.0.1 na 0.0.0.0, to uzyskamy zdalny dostęp do Futona i CouchDB. (Ale stracimy dostęp lokalny.) ## Replikacja bazy danych Do czego może się przydać? ## Compacting database Ważne! Dlaczego?