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.
Codeblock |
---|
language | js |
---|
theme | Emacs |
---|
language | js |
---|
|
{query}[, {options}] |
Eine Besonderheit von Mongo Management Studio ist es, die Abfragen so schnell und einfach wie möglich einzugeben. Die folgenden Beispiel Abfragen Beispielabfragen beziehen sich auf die Collection zipcode aus dem Erste Schritte Tutorial.
Codeblock |
---|
language | js |
---|
theme | Emacs | language | js |
---|
|
// 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' |
Hinweis |
---|
MongoDB unterscheidet bei Abfragen immer zwischen Groß- und Kleinschreibung. Um dies zu umgehen, kann man Regular Expressions verwenden. |
Natürlich lassen sich auf diese Art und Weise auch komplexere Abfragen gestalten.
Codeblock |
---|
language | js |
---|
theme | Emacs | language | js |
---|
|
// Suche alle Städte aus dem US-Bundesstaat Alabama (AL) mit mehr als 40000 Einwohnern
// Standard MongoDB Abfrage
{
state: "AL",
pop: {
$gt: 40000
}
}
// verkürzte Abfrage
state: "AL", pop: {$gt: 40000}
// verkürzte Abfrage mit ohne Leerzeichen
state:"AL",pop:{$gt:40000} |
Verwendung von Optionen
Codeblock |
---|
language | js |
---|
theme | Emacs | language | js |
---|
|
// Suche alle Städte aus dem US-Bundesstaat Alabama (AL) mit mehr als 40000 Einwohnern, und liefere in der Ergebnismenge nur die Städtenamen
{state: "AL", pop: {$gt: 40000}}, {fields: {city: 1}}
// Array Syntax
{state: "AL", pop: {$gt: 40000}}, {fields: ['city']}
// auch id Feld weglassen
{state: "AL", pop: {$gt: 40000}}, {fields: {city: 1, _id: 0}}
// Suche alle Städte aus dem US-Bundesstaat Alabama (AL) mit mehr als 10000 Einwohnern und sortiere aufsteigend nach Städtenamen
{state: "AL", pop: {$gt: 10000}}, {sort: {city: 1}}
// Suche alle Städte aus dem US-Bundesstaat Alabama (AL) mit mehr als 10000 Einwohnern und liefere 10 Datensätze und überspringe die ersten 20 Datensätze
{state: "AL", pop: {$gt: 10000}}, {limit: 10, skip: 20} |
Hinweis |
---|
Bei der Verwendung eines option options Objekts müssen auch bei dem query Objekt geschweifte Klammern verwendet werden. |
Hinweis |
---|
Soll in den Optionen mittels "$elemMatch" nach ObjectIds oder ISODates gesucht werden (siehe Beispiel), so muss der Konsolenmodus verwendet werden. Codeblock |
---|
| {}, {fields: {match: {$elemMatch: {a: ObjectId("53ea1f663b6f20cc19001002")}}}} |
|
Tipp |
---|
In der Tabellenansicht kann man auch Sortierensortieren, ohne dass man eine sort option verwenden muss. Dazu genügt es, auf den Namen einer Spalte zu klicken, um nach dieser zu sortieren. Bei Beim nochmaligen Klick auf den Spaltennamen wird die Sortierung umgekehrt. |
Spezielle Datentypen
ObjectId
Folgende Abfragen liefern jeweils das gleiche Ergebnis, wenn man nach einer bestimmte bestimmten ObjectId sucht
Codeblock |
---|
language | js |
---|
theme | Emacs | language | js |
---|
|
{_id: ObjectId('52bd27ebf370afe931001364')}
{_id: ObjectId("52bd27ebf370afe931001364")}
_id: ObjectId('52bd27ebf370afe931001364')
_id: ObjectId("52bd27ebf370afe931001364")
_id: "52bd27ebf370afe931001364"
_id: '52bd27ebf370afe931001364' |
Hinweis |
---|
Mongo Management Studio erkennt Strings, die das Format einer MongoDB ObjectId haben und konvertiert dieses dann. Sollte es passieren, dass in einer Collection _ids als Strings gespeichert und diese MongoDB ObjectId konform sind, muss man für die Suchabfrage über den Konsolenmodus verwenden. Ansonsten werden keine Daten gefunden. Codeblock |
---|
language | js |
---|
theme | Emacs | language | js |
---|
| // finde Person mit id '52bd27ebf370afe931001364'
db.persons.find{_id: '52bd27ebf370afe931001364'}
|
|
Datumswerte
Datumswerte müssen in einer bestimmten Syntax eingegeben werden, da diese nicht automatisch konvertiert werden können.
Codeblock |
---|
language | js |
---|
theme | Emacs | language | js |
---|
|
// als ISO-String
start: ISODate('2013-08-02T08:20:38.993Z')
// als Datums-String
start: {$gte: {ISODate('dec 11, 1989')}}
start: {$gte: {ISODate('"1989, 12, 11'")}}
// als timestamp in ms
start: ISODate(629379488000) |
per ISO-String
Codeblock |
---|
theme | Emacs |
---|
language | js |
---|
linenumbers | true |
---|
|
beispieldatum: ISODate('2013-08-02T08:20:38.993Z') |
oder
Codeblock |
---|
theme | Emacs |
---|
language | js |
---|
linenumbers | true |
---|
|
beispieldatum: { $gte: ISODate('dec 11, 1989')} |
oder
Codeblock |
---|
theme | Emacs |
---|
language | js |
---|
linenumbers | true |
---|
|
beispieldatum: {$gte: ISODate('1989, 12, 11')} |
oder per timestamp
Codeblock |
---|
theme | Emacs |
---|
language | js |
---|
linenumbers | true |
---|
|
beispieldatum: { $gte: ISODate('629379488000')} |
Hinweis |
---|
Javascript 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 kann man will diesen abfragen, so kann man dies leicht auf diese Weise:wie folgt abfragen.
Codeblock |
---|
theme | Emacs |
---|
language | js |
---|
linenumberstheme | trueEmacs |
---|
|
beispielregexpattern: /abc/ |
Hinweis |
---|
Es muss der komplette Regex-Ausdruck angegeben werden, um den entsprechenen entsprechenden Datensatz mit dem richtigen Wert zu erhalten. |
...
Regex-Abfragen 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.
...
Man kann Regex auch verwenden, um Felder abzufragen.
Codeblock |
---|
language | js |
---|
linenumberstheme | true | Emacs |
---|
|
// Suche alle Städte, die mit FLO beginnen
city: {$regex: '^FLO'}
// ignoriere Groß- und Kleinschreibung
city: {$regex: '^COAL^flo', $options: 'i'} |
Das entsprechende Ergebnis sieht dann wie folgt aus
Image Removed
und liefert 16 Datensätze zurück.
Natürlich läßt sich die Abfrage auch einfacher gestalten:
Codeblock |
---|
theme | Emacs |
---|
language | js |
---|
linenumbers | true |
---|
|
// kurze Schreibweise
city: /^COAL^flo/i |
Das Ergebnis ist identisch.
Infonote |
---|
In der derzeitigen Version werden lediglich die Parameter "i" sowie "m" als Optionen bei der Kurzschreibweise unterstützt. Die Parameter "s" und "x" folgen in einer späteren Version. |
Tipp |
---|
Genauere Informationen zum Gebrauch von Regex-Ausdrücken in Abfragen kann man |
...
...
...