Die Find Abfrage orientiert sich an der Syntax des MongoDB Javascript Treibers (http://mongodb.github.io/node-mongodb-native/api-generated/collection.html#find). Es wird mindestens ein query Objekt benötigt. Optional kann man noch ein options Objekt angeben.
{query}[, {options}]
Eine Besonderheit von Mongo Management Studio ist es, die Abfragen so schnell und einfach wie möglich einzugeben. Die folgenden Beispiel Abfragen beziehen sich auf die Collection zipcode aus dem Erste Schritte Tutorial.
// Suche nach allen Städten aus dem US-Bundesstaat Kalifornien (CA) // alle Abfragen liefern das gleiche Ergebnis // Standard MongoDB Abfrage {state: "CA"} // Wenn kein options Objekt vorhanden ist, können die geschweiften Klammern weggelassen werden state: "CA" // Man kann auch alles in Anführungszeichen schreiben "state": "CA" // Oder einfache Anführungszeichen verwenden state: 'CA'
MongoDB unterscheidet bei Abfragen immer zwischen Groß- und Kleinschreibung. Um dies zu umgehen, kann man Regular Expressions verwenden.
Anliegen des MongoDB Management Studios ist es, möglichst schnell und einfach Abfragen zu erstellen und gegen den Server zu schicken. Dazu wurden die Parameter so vereinfacht, dass ausgehend von der Beispiel-Collection der Befehl
{state: "CA"}
auf diese Arten verkürzt werden kann:
"state": "CA"
oder
state: "CA"
oder
state: 'CA'
ausreicht, um alle Datensätze zu erhalten, deren Städte im Bundesstaat Kalifornien liegen.
Natürlich lassen sich auf diese Art und Weise auch komplexere Abfragen gestalten wie:
state: "AL", pop: {$gte: 10000}
Das Ergebnis dieser Abfrage liefert alle Städte zurück, welche im Bundesstaat Alabama liegen und deren Einwohnerzahl größer/gleich 10000 ist. Natürlich ist es auch möglich, die Abfrage in gewohnter Weise einzugeben,
{ state: "AL", pop: { $gte: 10000 } }
das Ergebnis ist dasselbe.
Sonderfälle Abfragen
Optionen
Eine weitere Möglichkeit bietet die Angabe von Optionen wie im folgenden Beispiel:
{state: "AL", pop: {$gte: 10000}}, {fields: {city: 1}}
Das Ergebnis liefert neben der „_id“ der jeweiligen Datensätze nur das Feld „city“ mit zurück. Zu beachten ist hierbei der Umstand, dass bei der Angabe von Optionen die jeweiligen Bereiche, sprich Abfrage und Optionen durch geschweifte Klammern voneinander getrennt werden müssen.
Oder möchte man unabhängig vom bestehenden Pager in der Anwendung "limit" und "skip" verwenden, so geschieht dies auf folgende Weise:
{state: "AL", pop: {$gte: 10000}}, {limit: 10, skip: 20}
Das Ergebnis ist eine Ausgabe von 10 Datensätzen, wobei die ersten 20 Datensätze der Abfrage übersprungen werden.
ObjectIds, _id
Bei der Suche nach bestimmten Ids, gibt man für die Id einfach folgende Syntax ein:
_id: '52bd27ebf370afe931001364'
oder wenn man auf Nummer sicher gehen möchte:
_id: ObjectId('52bd27ebf370afe931001364')
Natürlich gehen auch all die anderen Schreibweisen, was Hochkommata oder Anführungsstriche angeht.
Sollte es passieren, dass in einer Collection _ids als Strings gespeichert und diese Mongo-Id konform sind, so ist es ratsam die Suchabfrage über den Konsolenmodus zu starten, da in unserer Anwendung im Hintergund Funktionen arbeiten, welche diese Ids in Abfragen in Mongo-Ids umwandeln.
Datumswerte
Bei Datumswerten fogt man im normalen Abfrage-modus ebenfalls einer einfachen Schreibweise:
per ISO-String
beispieldatum: ISODate('2013-08-02T08:20:38.993Z')
oder
beispieldatum: { $gte: ISODate('dec 11, 1989')}
oder
beispieldatum: {$gte: ISODate('1989, 12, 11')}
oder per timestamp
beispieldatum: { $gte: ISODate('629379488000')}
Javascript arbeitet in Millisekunden, UNIX timestamps müssen mit 1000 multipliziert werden, um korrekt umgerechnet oder angezeigt werden zu können.
Die Regelungen zu den Hochkommata und Anführungsstrichen gilt auch hier.
Regex als Wertzuweisung eines Datenfeldes
Besitzt ein Feld eines Datensatzes als Wert einen Regex-Ausdruck und man will diesen abfragen, so kann man dies leicht auf diese Weise:
beispielregex: /abc/
Es muss der komplette Regex-Ausdruck angegeben werden, um den entsprechenen Datensatz mit dem richtigen Wert zu erhalten.
Regexabfragen für Felder mit Strings
Möchte man zum Beispiel alle Städte angezeigt bekommen, welche in ihrem Namen mit "COAL" beginnen, so kann man sich einer Abfrage mit einem Regex-Ausdruck bedienen.
city: {$regex: '^COAL', $options: 'i'}
Das entsprechende Ergebnis sieht dann wie folgt aus
und liefert 16 Datensätze zurück.
Natürlich läßt sich die Abfrage auch einfacher gestalten:
city: /^COAL/i
Das Ergebnis ist identisch.
In der derzeitigen Version werden lediglich die Parameter "i" sowie "m" als Optionen unterstützt. Die Parameter "s" und "x" folgen in einer späteren Version.
Genauere Informationen zum Gebrauch von Regex-Ausdrücken in Abfragen kann man auch nachlesen unter:
http://docs.mongodb.org/manual/reference/operator/query/regex/