Narzędzia użytkownika

Narzędzia witryny


pl:paw:lab_couchdb_zal

To jest stara wersja strony!


CouchDB 2

Baza danych dostępna jest pod adesem: http://awing.kis.agh.edu.pl:5984 interface Web: http://awing.kis.agh.edu.pl:5984/_utils

Warunek zaliczenia opisany jest na końcu.

Ćwiczenie 1

  1. Umieść w bazie danych z poprzednich ćwiczeń dokumenty reprezentujące listę zakupów, każdy z dokumentów musi zawierać przynajmniej: nazwę, informacje o cenie produktu i nazwę sklepu w jakim jest dostępny, np. dla czterech produktów może to być:
    {"produkt":"chleb", "cena": 2.2, "sklep":"Biedronka", "kiedy_kupic":"co tydzien"}
     
    {"produkt":"pomidor", "cena": 6, "sklep":"Biedronka", "kiedy_kupic":"co tydzien"}
     
    {"produkt":"sanki", "cena": 119, "sklep":"Auchan", "opis":"czerwono-czarne, metalowe"}
     
    {"produkt":"lody", "cena": 3.2, "sklep":"Lidl"}
     
  2. napisz widok sklep, który umożliwi dostęp do informacji o zakupach posortowanych ze względu na nazwę sklepu,
  3. napisz widok ile, który obliczy ile jest towarów do kupienia w każdym ze sklepów,
  4. napisz widok srednia, który policzy średnią cenę (Uwaga na proces reduce/rereduce!, czy da się obliczyć średnią jako liczbę?).

Ćwiczenie 2

Udziel odpowiedzi na poniższe pytania.

  1. Pod jakim adresem URI można odnaleźć informacje o towarach do kupienia w sklepie o nazwie Biedronka?
    Podpowiedź: do widoku można przekazać za pomocą GET parametr key, który określa wartość klucza dla której mają być zwrócone informacje np.:
    http://..../nazwa_widoku?key="czarny"

    zwróci tylko rekordy o wartości klucza równiej czarny.

  2. Pod jakim adresem można dowiedzieć się ile towarów jest do kupienia w Biedronce?

Zaliczenie

Jeżeli nie zdążyłaś/zdążyłeś wykonać powyższych ćwiczeń na zajęciach, prześlij odpowiedź na pytanie 2 z ćwiczenia 2 na adres: wojnicki@agh.edu.pl, do 2021-12-31. Jako tytuł wiadomości proszę podać: PAW NoSQL:nazwisko, imie.

Ćwiczenie 3 (dla zainteresowanych)

Prześledź działanie aplikacji implementującej prostą listę zadań. Poniższy kod źródłowy pochodzi z: http://www.speqmath.com/tutorials/couchdb_tasklist/index.html :

<html>
<head>
    <title>Tasks</title>
 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>
    <script type="text/javascript">
        // retrieve database name from url (for example "tasks")
        var DATABASE = "/" + window.location.href.split("/")[3];
 
        function getTasks() {
            $.ajax({
                url: DATABASE + "/_design/tasks/_view/tasks",
                success: function (data){
		    //                    var view = JSON.parse(data);
		    var view = data;
                    var tasks = [];
                    $(view.rows).each( function (index, item) {
                        tasks.push (item.value);
                    });
                    displayTasks(tasks);
                }
             });
        }
 
        function displayTasks(tasks) {
            var html = "<table>";
            $(tasks).each( function (index, task) {
                var edit = "<input type='button' value='Edit' " +
                    "onclick='editTask(" + JSON.stringify(task) + ")' />";
                var del = "<input type='button' value='Delete' " +
                    "onclick='deleteTask(" + JSON.stringify(task) + ")' />";
 
                html += "<tr>";
                html += "<td>" + task.task + "</td>";
                html += "<td>" + edit + "</td>";
                html += "<td>" + del + "</td>";
                html += "</tr>";
            });
            html += "</table>";
 
            $('#tasks').empty();            
            $('#tasks').append(html);
        }
 
        function addTask() {
            var desc = prompt("Enter a task description");
            if (desc) {
                var task = {
                    "task": desc
                };
 
                $.ajax({
                    type: "POST",
                    url: DATABASE,
                    contentType: "application/json",
                    data: JSON.stringify(task),
                    success: function () {
                        getTasks();
                    }
                 });
            }
        }
 
        function editTask(task) {
            var desc = prompt("New task description", task.task);
            if (desc) {
                task.task = desc;
 
                $.ajax({
                    type: "PUT",
                    url: DATABASE + "/" + task._id,
                    contentType: "application/json",
                    data: JSON.stringify(task),
                    success: function () {
                        getTasks();
                    }
                 });
            }
        }
 
        function deleteTask(task) {
            var doit = confirm("Do you really want to delete the task '" + 
                task.task + "'?");
            if (doit) {
                $.ajax({
                    type: "DELETE",
                    url: DATABASE + "/" + task._id + "?rev=" + task._rev,
                    success: function () {
                        getTasks();
                    }
                 });
            }
        }
 
        // create view (will fail if already existing)
        function createView() {
            var view = {
               "language": "javascript",
               "views": {
                   "tasks": {
                       "map": "function(doc) {if (doc.task) {emit(doc.task, doc);}}"
                   }
               }
            }
            $.ajax({
                type: "PUT",
                url: DATABASE + "/_design/tasks",
                contentType: "application/json",
                data: JSON.stringify(view)
             });
        }
    </script>
</head>
 
<body onload="createView(); getTasks();">
    <h1>Tasks</h1>    
    <input type="button" id="add" value="Add" onclick="addTask();" />
    <div id="tasks"></div>
</body>
</html>
  1. Umieść powyższy kod w pliku o nazwie „index.html”.
  2. W swojej bazie danych utwórz dokument o identyfikatorze webpage
  3. Do w/w dodaj załącznik w postaci pobranego wcześniej pliku index.html o nazwie index.html
  4. Skieruj przeglądarkę pod adres (uwaga zamień wojnickilista na nazwę Twojej bazy danych): http://awing.kis.agh.edu.pl:5984/wojnickilista/webpage/index.html
  5. Przetestuj działanie aplikacji:
    1. dodaj 3 zadania
    2. zweryfikuj zawartość Twojej bazy danych
    3. usuń 1 zadanie
    4. zweryfikuj zawartość Twojej bazy danych
    5. zmień (edytuj) 1 zadanie
    6. zweryfikuj zawartość Twojej bazy danych, sprawdź czy zmieniła się wartość _rev dla edytowanego dokumentu?
pl/paw/lab_couchdb_zal.1638525865.txt.gz · ostatnio zmienione: 2021/12/03 11:04 przez wojnicki