%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{Datenbanken}
\chead{}
\ohead{https://kohnlehome.de/datenbanken/mongodb-queries.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: Queries mit find()
\end{center}

\section{Einfache Abfragen mit find()}
\subsection{Projektion: Welche Felder (Spalten)?}
\begin{verbatim}
db.collection.find({}, {_id: 0, feld1: 1, feld2: 1})  // nur feld1 und feld2 anzeigen
db.collection.find({}, {_id: 0, feld1: 0, feld2: 0})  // alle Felder ausser
                                                      // _id, feld1 und feld2 anzeigen
\end{verbatim}

\subsection{Filtern: Welche Dokumente (Zeilen)?}
\subsubsection{Vergleichsoperatoren für Zahlen und Datumswerte}
\begin{verbatim}
db.collection.find({feld: wert})        // =
db.collection.find({feld: {$eq: wert}}) // =
db.collection.find({feld: {$lt: new Date("2000-12-24")}}) // vor dem 24.12.2000
$lt  // <
$gt  // >
$gte // >=
$lte // <=
$ne  // <>
\end{verbatim}

\subsubsection{IN}
\begin{verbatim}
db.collection.find({feld: {$in: [wert1, wert2, wert3]}})   // IN
db.collection.find({feld: {$nin: [wert1, wert2, wert3]}})  // NOT IN
  
db.collection.find({feld: /A/})  // LIKE "%A%" -> Regex
\end{verbatim}

\subsubsection{LIKE $\rightarrow$ Regex}
\begin{verbatim}
db.collection.find({"feld": /A/})  // LIKE "%A%" -> Regex
\end{verbatim}

\subsubsection{Logische Operatorn}
\begin{verbatim}
db.collection.find({feld: {$gte: 5, $lte: 8}})                       // AND
db.collection.find({$and: [ {feld: {$gte: 5}}, {feld: {$lte: 8}} ]}) // AND
db.collection.find({$or:  [ {feld: {$lte: 5}}, {feld: {$gte: 8}} ]}) // OR
db.collection.find({feld: {$not: {$gte: 5}}})                        // NOT
\end{verbatim}

\subsection{Sortieren}
\begin{verbatim}
db.collection.find().sort({ feld: 1})  // ASC
db.collection.find().sort({ feld: -1}) // DESC
\end{verbatim}

\subsection{Anzahl der Zeilen begrenzen}
\begin{verbatim}
db.collection.find().skip(5).limit(10) // Dokumente 6 bis 15
\end{verbatim}


\section{Aggregation}
\begin{verbatim}
db.collection.find().count()    // Anzahl der Dokumente
db.collection.distinct("feld")  // Array mit unterschiedlichen Werten des Feldes
\end{verbatim}

\end{document}
