MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

MongoDB – Abfrage einer Sammlung

MongoDB stellt db.collection.find() bereit Methode zum Abfragen von Dokumenten innerhalb einer Sammlung.

Die db.collection.find() wählt Dokumente in einer Sammlung aus und bringt einen Cursor zu den ausgewählten Dokumenten zurück.

Alle Dokumente zurücksenden

Dieses Beispiel gibt alle Dokumente der Musiker zurück Sammlung:

db.musicians.find()

Ergebnis:

{ "_id" : 1, "name" : "Ian Gillan", "instrument" : "Vocals" }
{ "_id" : 2, "name" : "Ian Paice", "instrument" : "Drums", "born" : 1948 }
{ "_id" : 3, "name" : "Roger Glover", "instrument" : "Bass", "born" : 1945 }
{ "_id" : 4, "name" : "Steve Morse", "instrument" : "Guitar", "born" : 1954 }
{ "_id" : 5, "name" : "Don Airey", "instrument" : "Keyboards", "born" : 1948 }
{ "_id" : 6, "name" : "Jeff Martin", "instrument" : "Vocals", "born" : 1969 }
{ "_id" : 7, "name" : "Jeff Burrows", "instrument" : "Drums", "born" : 1968 }
{ "_id" : 8, "name" : "Stuart Chatwood", "instrument" : "Bass", "born" : 1969 }

Es gibt alle Dokumente zurück, weil wir keine Parameter als Filterkriterien übergeben haben.

Die obige Abfrage ist eine verkürzte Version von db.musicians.find( {} ) . In der obigen Abfrage haben wir die geschweiften Klammern {} weggelassen . Dies gilt perfekt für die Arbeit mit MongoDB.

Filterkriterien hinzufügen

Sie können die Ergebnisse nach unten filtern, indem Sie nur die Kriterien angeben, die Sie interessieren.

Zum Beispiel, wenn uns nur Deep Purple von den Künstlern interessiert Sammlung:

db.artists.find({ artistname : "Deep Purple" })

Ergebnis:

{ "_id" : ObjectId("5781f85d48ef8c6b3ffb0150"), "artistname" : "Deep Purple", "albums" : [ { "album" : "Machine Head", "year" : 1972, "genre" : "Rock" }, { "album" : "Stormbringer", "year" : 1974, "genre" : "Rock" } ] }

Formatieren Sie die Ergebnisse

Möglicherweise finden Sie die obigen Ergebnisse etwas schwer zu lesen. Das Dokument wird als eine lange Textzeile zurückgegeben.

Sie können das pretty() verwenden Methode, um die Ergebnisse so zu formatieren, dass sie etwas leichter zu lesen sind.

Hängen Sie einfach pretty() an bis zum Ende, so:

db.artists.find({ artistname : "Deep Purple" }).pretty()

Ergebnis:

{
	"_id" : ObjectId("5781f85d48ef8c6b3ffb0150"),
	"artistname" : "Deep Purple",
	"albums" : [
		{
			"album" : "Machine Head",
			"year" : 1972,
			"genre" : "Rock"
		},
		{
			"album" : "Stormbringer",
			"year" : 1974,
			"genre" : "Rock"
		}
	]
}

Weitere Filteroptionen

Hier sind einige weitere Möglichkeiten zum Filtern von Ergebnissen.

Geben Sie AND an Bedingungen

Sie können angeben, dass nur Dokumente zurückgegeben werden sollen, die zwei oder mehr angegebene Werte enthalten.

In diesem Beispiel geben wir an, dass nur Musiker und Schlagzeug spielen die vor 1950 geboren sind, zurückzugeben. Nur Dokumente, die beide Kriterien erfüllen, werden zurückgegeben.

db.musicians.find( { instrument: "Drums", born: { $lt: 1950 } } )

Ergebnis:

{ "_id" : 2, "name" : "Ian Paice", "instrument" : "Drums", "born" : 1948 }

Geben Sie OR an Bedingungen

Sie können auch angeben, dass entweder der eine oder der andere Wert wahr sein soll. Solange eine der Bedingungen zutrifft, wird das Dokument zurückgesendet.

In diesem Beispiel möchten wir Dokumente, die Musiker enthalten, die entweder Schlagzeug spielen oder vor 1950 geboren wurden.

db.musicians.find(
   {
     $or: [ { instrument: "Drums" }, { born: { $lt: 1950 } } ]
   }
)

Ergebnis:

{ "_id" : 2, "name" : "Ian Paice", "instrument" : "Drums", "born" : 1948 }
{ "_id" : 3, "name" : "Roger Glover", "instrument" : "Bass", "born" : 1945 }
{ "_id" : 5, "name" : "Don Airey", "instrument" : "Keyboards", "born" : 1948 }
{ "_id" : 7, "name" : "Jeff Burrows", "instrument" : "Drums", "born" : 1968 }

Der $in Betreiber

Der $in Mit dem Operator können Sie eine Liste mit Werten bereitstellen. Wenn ein Dokument einen dieser Werte enthält, wird er zurückgegeben.

Anhand des folgenden Beispiels suchen wir nach allen Musikern, die entweder Gesang oder Gitarre spielen.

db.musicians.find( { instrument: { $in: [ "Vocals", "Guitar" ] } } )

Ergebnis

{ "_id" : 1, "name" : "Ian Gillan", "instrument" : "Vocals" }
{ "_id" : 4, "name" : "Steve Morse", "instrument" : "Guitar", "born" : 1954 }
{ "_id" : 6, "name" : "Jeff Martin", "instrument" : "Vocals", "born" : 1969 }

Ein Array von Dokumenten abfragen

Dieses Beispiel fragt ein Array von Dokumenten ab. Es findet Alben, die nach dem Jahr 2000 veröffentlicht wurden.

db.artists.find(
   {
      albums: {
                $elemMatch: {
                     year: { $gt: 2000 }
                }
      }
   }
).pretty()

Ergebnis:

{
	"_id" : ObjectId("578217c248ef8c6b3ffb015a"),
	"artistname" : "Robben Ford",
	"albums" : [
		{
			"album" : "Bringing it Back Home",
			"year" : 2013,
			"genre" : "Blues"
		},
		{
			"album" : "Talk to Your Daughter",
			"year" : 1988,
			"genre" : "Blues"
		}
	]
}
{
	"_id" : ObjectId("578217c248ef8c6b3ffb015b"),
	"artistname" : "Snoop Dogg",
	"albums" : [
		{
			"album" : "Tha Doggfather",
			"year" : 1996,
			"genre" : "Rap"
		},
		{
			"album" : "Reincarnated",
			"year" : 2013,
			"genre" : "Reggae"
		}
	]
}

Sie werden feststellen, dass diese Ergebnisse auch Alben von vor 2000 enthalten. Das ist richtig – so funktionieren dokumentenorientierte Datenbanken. Jede Abfrage gibt das gesamte Dokument zurück (aber nur die Dokumente, die den angegebenen Kriterien entsprechen).

Der db.collection.findOne() Methode

Sie können db.collection.findOne() verwenden -Methode, um ein Dokument zurückzugeben, das die angegebenen Abfragekriterien erfüllt.

Wenn mehrere Dokumente die Kriterien erfüllen, wird nur das erste zurückgegeben, wie es durch die natürliche Reihenfolge der Dokumente auf der Festplatte bestimmt wird.

Durchsuchen Sie also eine ganze Sammlung wie folgt:

db.musicians.findOne( )

Gibt nur ein Dokument zurück:

{ "_id" : 1, "name" : "Ian Gillan", "instrument" : "Vocals" }

Wenn wir findOne() ändern zu find() so:

db.musicians.find( )

Wir sehen, dass die Sammlung tatsächlich 8 Dokumente enthält:

{ "_id" : 1, "name" : "Ian Gillan", "instrument" : "Vocals" }
{ "_id" : 2, "name" : "Ian Paice", "instrument" : "Drums", "born" : 1948 }
{ "_id" : 3, "name" : "Roger Glover", "instrument" : "Bass", "born" : 1945 }
{ "_id" : 4, "name" : "Steve Morse", "instrument" : "Guitar", "born" : 1954 }
{ "_id" : 5, "name" : "Don Airey", "instrument" : "Keyboards", "born" : 1948 }
{ "_id" : 6, "name" : "Jeff Martin", "instrument" : "Vocals", "born" : 1969 }
{ "_id" : 7, "name" : "Jeff Burrows", "instrument" : "Drums", "born" : 1968 }
{ "_id" : 8, "name" : "Stuart Chatwood", "instrument" : "Bass", "born" : 1969 }