sql >> Database teknologi >  >> NoSQL >> MongoDB

MongoDB - Forespørg på en samling

MongoDB leverer db.collection.find() metode til at forespørge dokumenter i en samling.

db.collection.find() vælger dokumenter i en samling og returnerer en markør til de valgte dokumenter.

Returner alle dokumenter

Dette eksempel returnerer alle dokumenter fra musikerne samling:

db.musicians.find()

Resultat:

{ "_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 }

Det returnerer alle dokumenter, fordi vi ikke har sendt nogen parametre som filtreringskriterier.

Ovenstående forespørgsel er en forkortet version af db.musicians.find( {} ) . I ovenstående forespørgsel udelod vi de krøllede klammeparenteser {} . Dette er helt gyldigt, når du arbejder med MongoDB.

Tilføj filtreringskriterier

Du kan filtrere resultaterne ned ved kun at angive de kriterier, du er interesseret i.

For eksempel, hvis vi kun er interesseret i Deep Purple fra kunstnerne samling:

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

Resultat:

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

Formatér resultaterne

Du kan finde ovenstående resultater lidt svære at læse. Dokumentet returneres som én lang tekstlinje.

Du kan bruge pretty() metode til at formatere resultaterne, så de er lidt nemmere at læse.

Bare tilføj pretty() til slutningen, sådan her:

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

Resultat:

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

Flere filtreringsmuligheder

Her er nogle flere måder at filtrere resultater på.

Angiv AND Betingelser

Du kan angive, at kun dokumenter, der indeholder to eller flere specificerede værdier, skal returneres.

I dette eksempel specificerer vi, at kun musikere, der spiller trommer og hvor født før 1950 skal returneres. Kun dokumenter, der matcher begge kriterier, vil blive returneret.

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

Resultat:

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

Angiv OR Betingelser

Du kan også angive, at enten den ene eller den anden værdi skal være sand. Så længe en af ​​betingelserne er opfyldt, vil dokumentet blive returneret.

I dette eksempel ønsker vi dokumenter, der indeholder musikere, der enten spiller trommer eller er født før 1950.

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

Resultat:

{ "_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 }

$in Operatør

$in operator giver dig mulighed for at angive en liste over værdier. Hvis et dokument indeholder nogen af ​​disse værdier, vil det blive returneret.

Ved at bruge følgende eksempel søger vi efter alle musikere, der enten er på vokal eller spiller guitar.

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

Resultat

{ "_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 }

Forespørg en række dokumenter

Dette eksempel forespørger en række dokumenter. Den finder albums, der blev udgivet efter år 2000.

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

Resultat:

{
	"_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"
		}
	]
}

Du vil bemærke, at disse resultater også indeholder album fra tidligere end 2000. Dette er korrekt – det er den måde, dokumentorienterede databaser fungerer på. Enhver forespørgsel vil returnere hele dokumentet (men kun de dokumenter, der matcher de angivne kriterier).

db.collection.findOne() Metode

Du kan bruge db.collection.findOne() metode til at returnere et dokument, der opfylder de angivne forespørgselskriterier.

Hvis flere dokumenter opfylder kriterierne, returneres kun det første, som bestemt af den naturlige rækkefølge af dokumenterne på disken.

Så søger en hel samling som denne:

db.musicians.findOne( )

Vil kun returnere ét dokument:

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

Hvis vi ændrer findOne() til find() sådan her:

db.musicians.find( )

Vi ser, at der faktisk er 8 dokumenter i samlingen:

{ "_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 }

  1. MongoDB $ multiplicere

  2. MongoDB / Pymongo-forespørgsel med Datetime

  3. Hvad er Map Only job i Hadoop?

  4. MongoDB $dateFromParts