Versionen im Vergleich

Schlüssel

  • Diese Zeile wurde hinzugefügt.
  • Diese Zeile wurde entfernt.
  • Formatierung wurde geändert.

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
languagejs
themeEmacslanguagejs
{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
languagejs
themeEmacsjs
// 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.

 

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

...


...

Natürlich lassen sich auf diese Art und Weise auch komplexere Abfragen gestalten.

{
Codeblock
languagejs
linenumbersthemetrue
Emacs
// Suche alle Städte aus dem US-Bundesstaat Alabama (AL) mit mehr als 40000 Einwohnern
 
// Standard MongoDB Abfrage
{
	state: "CA"}

 

auf diese Arten verkürzt werden kann:

Codeblock
themeEmacs
languagejs
linenumberstrue
"state": "CA"

oder

Codeblock
themeEmacs
languagejs
linenumberstrue
state: "CA"

oder

Codeblock
themeEmacs
languagejs
linenumberstrue
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:

Codeblock
themeEmacs
languagejs
linenumberstrue
AL",
	pop: {
		$gt: 40000
	}
}
 
// verkürzte Abfrage
state: "AL", pop: {$gt: 40000}
 
// verkürzte Abfrage ohne Leerzeichen
state:"AL",pop:{$gt:40000}

Verwendung von Optionen

Codeblock
languagejs
themeEmacs
// 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: {$gte$gt: 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,

Codeblock
themeEmacs
languagejs
linenumberstrue
{
	40000}}, {fields: ['city']}

// auch id Feld weglassen
{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:

Codeblock
themeEmacs
languagejs
linenumberstrue
$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: {$gte$gt: 10000}}, {fieldssort: {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:

Codeblock
themeEmacs
languagejs
linenumberstrue

 
// 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: {$gte$gt: 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:

Codeblock
themeEmacs
languagejs
linenumberstrue
_id: '52bd27ebf370afe931001364'

oder wenn man auf Nummer sicher gehen möchte:

Codeblock
themeEmacs
languagejs
linenumberstrue
Hinweis

Bei der Verwendung eines 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
languagejs
themeEmacs
{}, {fields: {match: {$elemMatch: {a: ObjectId("53ea1f663b6f20cc19001002")}}}}
Tipp

In der Tabellenansicht kann man auch sortieren, ohne dass man eine sort option verwenden muss. Dazu genügt es, auf den Namen einer Spalte zu klicken, um nach dieser zu sortieren. Beim nochmaligen Klick auf den Spaltennamen wird die Sortierung umgekehrt.

Spezielle Datentypen

ObjectId

Folgende Abfragen liefern jeweils das gleiche Ergebnis, wenn man nach einer bestimmten ObjectId sucht

Codeblock
languagejs
themeEmacs
{_id: ObjectId('52bd27ebf370afe931001364')}
{_id: ObjectId("52bd27ebf370afe931001364")}
_id: ObjectId('52bd27ebf370afe931001364')

Natürlich gehen auch all die anderen Schreibweisen, was Hochkommata oder Anführungsstriche angeht.

Hinweis

_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 Mongo-Id MongoDB ObjectId konform sind, so ist es ratsam muss man für 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

Codeblock
themeEmacs
languagejs
linenumberstrue
beispieldatum

den Konsolenmodus verwenden. Ansonsten werden keine Daten gefunden.

Codeblock
languagejs
themeEmacs
// 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
languagejs
themeEmacs
// als ISO-String
start: ISODate('2013-08-02T08:20:38.993Z')

oder 

Codeblock
themeEmacs
languagejs
linenumberstrue
beispieldatum
 
// als Datums-String
start: { $gte: ISODate('dec 11, 1989')}

oder 

Codeblock
themeEmacs
languagejs
linenumberstrue
beispieldatum
start: {$gte: ISODate('"1989, 12, 11'")}

oder per timestamp

Codeblock
themeEmacs
languagejs
linenumberstrue
beispieldatum: { $gte
 
// als timestamp in ms
start: 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
languagejs
linenumbersthemetrueEmacs
beispielregexpattern: /abc/
Hinweis

Es muss der komplette Regex-Ausdruck angegeben werden, um den entsprechenen entsprechenden Datensatz mit dem richtigen Wert zu erhalten.

 

...

Anker
regex
regex

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
languagejs
linenumbersthemetrueEmacs
// 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
themeEmacs
languagejs
linenumberstrue

 
// kurze Schreibweise
city: /^COAL^flo/i

Das Ergebnis ist identisch.

Info
Hinweis

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

...

hier nachlesen http://docs.mongodb.org/manual/reference/operator/query/regex/

...

 

...