sql >> Base de Datos >  >> NoSQL >> MongoDB

MongoDB - Consultar una colección

MongoDB proporciona el db.collection.find() método para consultar documentos dentro de una colección.

El db.collection.find() selecciona documentos en una colección y devuelve un cursor a los documentos seleccionados.

Devolver todos los documentos

Este ejemplo devuelve todos los documentos de los músicos colección:

db.musicians.find()

Resultado:

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

Devuelve todos los documentos porque no pasamos ningún parámetro como criterio de filtrado.

La consulta anterior es una versión abreviada de db.musicians.find( {} ) . En la consulta anterior, omitimos las llaves {} . Esto es perfectamente válido cuando se trabaja con MongoDB.

Añadir criterios de filtrado

Puede filtrar los resultados proporcionando solo los criterios que le interesan.

Por ejemplo, si solo estamos interesados ​​en Deep Purple de los artistas colección:

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

Resultado:

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

Dar formato a los resultados

Es posible que encuentre los resultados anteriores un poco difíciles de leer. El documento se devuelve como una línea larga de texto.

Puedes usar pretty() método para formatear los resultados para que sean un poco más fáciles de leer.

Simplemente agrega pretty() hasta el final, así:

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

Resultado:

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

Más opciones de filtrado

Aquí hay algunas formas más de filtrar los resultados.

Especifique AND Condiciones

Puede especificar que solo se devuelvan los documentos que contengan dos o más valores especificados.

En este ejemplo, especificamos que solo los músicos que tocan la batería y donde nacido antes de 1950 debe ser devuelto. Solo se devolverán los documentos que coincidan con ambos criterios.

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

Resultado:

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

Especifique OR Condiciones

También puede especificar que uno u otro valor sea verdadero. Siempre que se cumpla una de las condiciones, se devolverá el documento.

En este ejemplo, queremos documentos que contengan músicos que toquen la batería o hayan nacido antes de 1950.

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

Resultado:

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

El $in Operador

El $in operador le permite proporcionar una lista de valores. Si un documento contiene alguno de esos valores, se devolverá.

Con el siguiente ejemplo, buscamos a todos los músicos que canten o toquen la guitarra.

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

Resultado

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

Consultar una matriz de documentos

Este ejemplo consulta una matriz de documentos. Encuentra álbumes que fueron lanzados después del año 2000.

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

Resultado:

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

Notará que estos resultados también contienen álbumes anteriores al año 2000. Esto es correcto:es la forma en que funcionan las bases de datos orientadas a documentos. Cualquier consulta devolverá el documento completo (pero solo aquellos documentos que coincidan con los criterios especificados).

El db.collection.findOne() Método

Puede usar db.collection.findOne() método para devolver un documento que satisfaga los criterios de consulta especificados.

Si varios documentos cumplen los criterios, solo se devuelve el primero, según lo determine el orden natural de los documentos en el disco.

Así que buscando una colección completa como esta:

db.musicians.findOne( )

Solo devolverá un documento:

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

Si cambiamos el findOne() para find() así:

db.musicians.find()

Vemos que en realidad hay 8 documentos en la colección:

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