MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

MongoDB - Consultar uma coleção


O MongoDB fornece o db.collection.find() método para consultar documentos dentro de uma coleção.

O db.collection.find() seleciona documentos em uma coleção e retorna um cursor para os documentos selecionados.

Devolver todos os documentos


Este exemplo retorna todos os documentos dos músicos coleção:
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 }

Ele retorna todos os documentos porque não passamos nenhum parâmetro como critério de filtragem.

A consulta acima é uma versão abreviada de db.musicians.find( {} ) . Na consulta acima, omitimos as chaves {} . Isso é perfeitamente válido ao trabalhar com o MongoDB.

Adicionar critérios de filtragem


Você pode filtrar os resultados fornecendo apenas os critérios de seu interesse.

Por exemplo, se estamos interessados ​​apenas no Deep Purple dos artistas coleção:
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" } ] }

Formatar os resultados


Você pode achar os resultados acima um pouco difíceis de ler. O documento é retornado como uma longa linha de texto.

Você pode usar o pretty() para formatar os resultados para que sejam um pouco mais fáceis de ler.

Basta anexar pretty() até o final, assim:
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"
		}
	]
}

Mais opções de filtragem


Aqui estão mais algumas maneiras de filtrar resultados.

Especifique AND Condições


Você pode especificar que apenas documentos contendo dois ou mais valores especificados devem ser retornados.

Neste exemplo, especificamos que apenas músicos que tocam bateria e onde nascidos antes de 1950 devem ser devolvidos. Apenas documentos que correspondam a ambos os critérios serão devolvidos.
db.musicians.find( { instrument: "Drums", born: { $lt: 1950 } } )

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

Especifique OR Condições


Você também pode especificar que um ou outro valor deve ser verdadeiro. Enquanto uma das condições for verdadeira, o documento será devolvido.

Neste exemplo, queremos documentos que contenham músicos que tocam bateria ou que nasceram 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 }

O $in Operador


O $in O operador permite que você forneça uma lista de valores. Se um documento contiver algum desses valores, ele será retornado.

Usando o exemplo a seguir, estamos procurando todos os músicos que cantam ou tocam 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 }

Consulte uma matriz de documentos


Este exemplo consulta uma matriz de documentos. Encontra álbuns que foram lançados após o ano 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"
		}
	]
}

Você notará que esses resultados também contêm álbuns anteriores a 2000. Isso está correto — é assim que os bancos de dados orientados a documentos funcionam. Qualquer consulta retornará o documento inteiro (mas apenas os documentos que correspondem aos critérios especificados).

O db.collection.findOne() Método


Você pode usar o db.collection.findOne() método para retornar um documento que satisfaça os critérios de consulta especificados.

Se vários documentos atenderem aos critérios, apenas o primeiro será retornado, conforme determinado pela ordem natural dos documentos no disco.

Então, pesquisando uma coleção inteira como esta:
db.musicians.findOne( )

Retornará apenas um documento:
{ "_id" : 1, "name" : "Ian Gillan", "instrument" : "Vocals" }

Se alterarmos o findOne() para find() assim:
db.musicians.find()

Vemos que na verdade existem 8 documentos na coleção:
{ "_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 }