%Teilweise Erzeugt mit dem LaTeX-Generator: http://latex.sehnot.de

%Schriftgröße, Layout, Papierformat, Art des Dokumentes
\documentclass[10pt,oneside,a4paper]{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
\usepackage[automark]{scrpage2}

%Quellcode-Listings
\usepackage{listings}

%Hyperlinks
\usepackage{hyperref}

%Kopfzeile
\ihead{NoSQL}
\chead{}
\ohead{http://kohnlehome.de/sql/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 starten: \texttt{mongod}
\item Client starten:
\begin{itemize}
\item CLI: \texttt{mongo}
\item GUI: \texttt{mongodb-compass} 
\end{itemize}  
\end{itemize}

\section*{mongo Shell Methods}
\href{https://docs.mongodb.com/manual/reference/method/}{docs.mongodb.com/manual}

\section*{Daten von Skriptdatei importieren}
\subsection*{Datei: script.js}
\begin{verbatim}
db = db.getSiblingDB("DATENBANKNAME");
db.CNAME.drop();
db.CNAME.insertMany([ ... ]);
\end{verbatim}

\subsection*{Skriptdatei ausführen}
\begin{verbatim}
mongo> load("script.js")
\end{verbatim}

\section*{Datenbanken verwalten}
\begin{tabular}{l l}
\texttt{show dbs} & Liste aller Datenbanken\\
\texttt{use  DATENBANKNAME} & Datenbank verwenden, bzw. erstellen (Default ist test)\\
\texttt{db.dropDatabase()} & aktuelle Datenbank löschen\\
\end{tabular}

\section*{Collections verwalten}
\begin{tabular}{l l}
\texttt{show collections} & Collections anzeigen
\\
\texttt{db.createCollection("CNAME")} & Collection erstellen\\
\texttt{db.CNAME.drop()} & Collection komplett löschen
\\
\end{tabular}

\newpage

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

db.CNAME.updateOne( {...}, {...}, { upsert: true })      # überschreiben oder neu erstellen
\end{verbatim}

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

<filter>
  {}                                               # 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

<projection>
  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.CNAME.updateOne( <filter>, <action> )     # ein Dokument ändern (einzelne Felder)
db.CNAME.updateMany( <filter>, <action> )    # mehrere Dokumente ändern (einzelne Felder)
db.CNAME.replaceOne( <filter>, <document> )  # kompletten Inhalt ersetzen
  
<action>
  { $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.CNAME.deleteOne( <filter> )       # ersten Treffer löschen
db.CNAME.deleteMany( <filter> )      # alle Treffer löschen
\end{verbatim}

\end{document}
