MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

MongoDB - Interroger une collection

MongoDB fournit le db.collection.find() méthode pour interroger les documents d'une collection.

Le db.collection.find() sélectionne des documents dans une collection et ramène un curseur sur les documents sélectionnés.

Renvoyer tous les documents

Cet exemple renvoie tous les documents des musiciens collecte :

db.musicians.find()

Résultat :

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

Il renvoie tous les documents car nous n'avons transmis aucun paramètre comme critère de filtrage.

La requête ci-dessus est une version abrégée de db.musicians.find( {} ) . Dans la requête ci-dessus, nous avons omis les accolades {} . Ceci est parfaitement valable lorsque vous travaillez avec MongoDB.

Ajouter des critères de filtrage

Vous pouvez filtrer les résultats en fournissant uniquement les critères qui vous intéressent.

Par exemple, si nous ne sommes intéressés que par Deep Purple des artistes collecte :

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

Résultat :

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

Formater les résultats

Vous pourriez trouver les résultats ci-dessus un peu difficiles à lire. Le document est renvoyé sous la forme d'une longue ligne de texte.

Vous pouvez utiliser le pretty() pour formater les résultats afin qu'ils soient un peu plus faciles à lire.

Ajoutez simplement pretty() jusqu'à la fin, comme ceci :

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

Résultat :

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

Plus d'options de filtrage

Voici d'autres façons de filtrer les résultats.

Spécifiez AND Conditions

Vous pouvez spécifier que seuls les documents contenant au moins deux valeurs spécifiées doivent être renvoyés.

Dans cet exemple, nous spécifions que seuls les musiciens qui jouent de la batterie et nés avant 1950 doivent être retournés. Seuls les documents correspondant aux deux critères seront renvoyés.

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

Résultat :

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

Spécifier OR Conditions

Vous pouvez également spécifier que l'une ou l'autre valeur doit être vraie. Tant que l'une des conditions est vraie, le document sera retourné.

Dans cet exemple, nous voulons des documents contenant des musiciens qui jouent de la batterie ou qui sont nés avant 1950.

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

Résultat :

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

Le $in Opérateur

Le $in L'opérateur vous permet de fournir une liste de valeurs. Si un document contient l'une de ces valeurs, il sera renvoyé.

En utilisant l'exemple suivant, nous recherchons tous les musiciens qui chantent ou jouent de la guitare.

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

Résultat

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

Interroger un tableau de documents

Cet exemple interroge un tableau de documents. Il trouve les albums sortis après l'an 2000.

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

Résultat :

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

Vous remarquerez que ces résultats contiennent également des albums antérieurs à 2000. C'est exact, c'est ainsi que fonctionnent les bases de données orientées document. Toute requête renverra le document entier (mais uniquement les documents qui correspondent aux critères spécifiés).

Le db.collection.findOne() Méthode

Vous pouvez utiliser le db.collection.findOne() méthode pour renvoyer un document qui satisfait les critères de requête spécifiés.

Si plusieurs documents répondent aux critères, seul le premier est renvoyé, tel que déterminé par l'ordre naturel des documents sur le disque.

Donc, recherchez une collection entière comme celle-ci :

db.musicians.findOne( )

Ne renverra qu'un seul document :

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

Si nous changeons le findOne() pour find() comme ceci :

db.musicians.find( )

On voit qu'il y a en fait 8 documents dans la collection :

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