%Schriftgröße, Layout, Papierformat, Art des Dokumentes
\documentclass[10pt,oneside,a4paper,headsepline,footsepline]{scrartcl}

%Einstellungen der Seitenränder
\usepackage[left=2cm,right=2cm,top=1.5cm,bottom=1.5cm,includeheadfoot]{geometry}

%neue Rechtschreibung
\usepackage[ngerman]{babel}

%Umlaute ermöglichen
\usepackage[utf8]{inputenc}

%Gesamtseitenzahl
\usepackage{lastpage}

% Kopf- und Fußzeile
% Funktioniert nicht \usepackage[automark]{scrpage2}%
\usepackage[automark]{scrlayer-scrpage}

%Quellcode-Listings
\usepackage{listings}

%Hyperlinks
\usepackage{hyperref}

% Single quotes
\usepackage{upquote,textcomp}

%Kopfzeile
\ihead{Datenbanken}
\chead{}
\ohead{https://kohnlehome.de/datenbanken/mongodb.pdf}
%\setheadsepline{0.5pt}

%Fußzeile
%\setfootsepline{0.5pt}
\ifoot{Franz Kohnle}
\cfoot{Seite \thepage\ von  \pageref{LastPage}}
\ofoot{\today}

\pagestyle{scrheadings}

\begin{document}

% Überschrift 
\begin{center}
\LARGE % Schriftgröße
\bfseries % Fettdruck
\sffamily % Serifenlose Schrift
MongoDB
\end{center}

\section*{Programme}
\begin{itemize}
\item Server : \texttt{mongod}
\item Clients:
\begin{itemize}
\item CLI: \texttt{mongosh}
\item GUI: \texttt{mongodb-compass} 
\end{itemize}  
\end{itemize}

\section*{mongosh}
Quelle: \href{https://www.mongodb.com/developer/products/mongodb/cheat-sheet/}{MongoDB Cheat Sheet}


\section*{0. Beispieldatenbanken installieren}
\begin{itemize}
    \item Datenbanken herunterladen: \texttt{wget https://atlas-education.s3.amazonaws.com/sampledata.archive}
    \item Datenbanken installieren: \texttt{mongorestore --archive=sampledata.archive}
\end{itemize}

\section*{1. Datenbanken verwalten}
\begin{verbatim}
show dbs             # Liste aller Datenbanken
use DATENBANK        # Datenbanken verwenden, bzw. erstellen (Default ist test)
db.dropDatabase()    # aktuelle Datenbanken löschen
\end{verbatim}

\section*{2. Collections verwalten}
\begin{verbatim}
show collections                    # Collections anzeigen
db.createCollection('COLLECTION')   # Collection erstellen
db.COLLECTION.drop()                # Collection komplett löschen
\end{verbatim}

\newpage

\section*{3. Dokumente verwalten (CRUD)}
\subsection*{Beispieldokument}
\begin{verbatim}
{vorname: 'Anna', nachname: 'Arm'} 
\end{verbatim}

\subsection*{Create}
\begin{verbatim}
db.COLLECTION.insertOne( {...} )                          # ein Dokument einfügen
db.COLLECTION.insertMany( [ {...}, {...}, ...] )          # mehrere Dokumente einfügen
\end{verbatim}

\subsection*{Read (Query)}
\begin{verbatim}
db.COLLECTION.findOne( <filter>, <projection> )           # gibt ersten Treffer zurück
db.COLLECTION.find( <filter>, <projection> )              # gibt Cursor zurück
\end{verbatim}

\subsubsection*{filter}
\begin{verbatim}
{}                                               # alle Dokumente
{ _id: ObjectId('563237a41a4d68582c2509da') }    # ein spezielles Dokument
{ name: 'Franz' }                                # alle mit Namen Franz
{ name: 'Franz', alter: { $gt : 50 } }           # alle mit Namen Franz UND älter als 50
\end{verbatim}

\subsubsection*{projection}
\begin{verbatim}
ohne Projektion                                  # alle Felder
{ name: 1 }                                      # nur _id und name
{ name: 0, alter: 0 }                            # alle ausser name und alter
\end{verbatim}

\subsection*{Update}
\begin{verbatim}
db.COLLECTION.updateOne( <filter>, <action> )    # ein Dokument ändern (einzelne Felder)
db.COLLECTION.updateMany( <filter>, <action> )   # mehrere Dokumente ändern
db.COLLECTION.replaceOne( <filter>, <document> ) # kompletten Inhalt ersetzen
\end{verbatim}

\subsubsection*{action}
\begin{verbatim}
{ $set: { name: 'Hans', alter: 25 } }            # Felder erstellen oder überschreiben
{ $unset: { name: '', alter: '' } }              # Felder löschen
{ $inc: { alter: 5 } }                           # alter += 5
\end{verbatim}

\subsection*{Delete}
\begin{verbatim}
db.COLLECTION.deleteOne( <filter> )              # ersten Treffer löschen
db.COLLECTION.deleteMany( <filter> )             # alle Treffer löschen
\end{verbatim}

\section*{4. JavaSkript-Datei ausführen}
\subsection*{Datei: script.js}
\begin{verbatim}
db = db.getSiblingDB('DATENBANK');
db.COLLECTION.drop();
db.COLLECTION.insertMany([ ... ]);
\end{verbatim}

\subsection*{Skriptdatei ausführen}
\begin{verbatim}
mongosh> load('script.js')
 oder 
mongosh script.js
\end{verbatim}

\end{document}
