Este capítulo apresenta a sintaxe básica de consulta do MongoDB através do shell do mongo. No shell do mongo, o método db.collection.find() é usado para consultar dados.

Preparar dados de teste

Inserir alguns dados na coleção de inventário.

db.inventory.insertMany([
   { item: "journal", qty: 25, size: { h: 14, w: 21, uom: "cm" }, status: "A" },
   { item: "notebook", qty: 50, size: { h: 8.5, w: 11, uom: "in" }, status: "A" },
   { item: "paper", qty: 100, size: { h: 8.5, w: 11, uom: "in" }, status: "D" },
   { item: "planner", qty: 75, size: { h: 22.85, w: 30, uom: "cm" }, status: "D" },
   { item: "postcard", qty: 45, size: { h: 10, w: 15.25, uom: "cm" }, status: "A" }
]);

Consultar todos os documentos

Consultar todos os documentos na coleção de inventário, {} representa uma condição de consulta vazia.

db.inventory.find( {} )

Similar à seguinte declaração SQL:

SELECT * FROM inventory

Condições de consulta de igualdade

Sintaxe:

{ campo: valor, ... }

Exemplo 1:

db.inventory.find( { status: "D" } )

Similar à seguinte declaração SQL:

SELECT * FROM inventory WHERE status = "D"

Exemplo 2: Consulta de campo aninhado, use um ponto (.) para conectar os campos de documentos aninhados.

db.inventory.find( { "size.uom": "in" } )

Similar à seguinte declaração SQL:

SELECT * FROM inventory WHERE size.uom = "in"

Observação: Os documentos do MongoDB são armazenados em formato JSON, então suportam o uso de campos aninhados como condições de consulta.

Usando operadores de consulta

O MongoDB suporta uma variedade de operadores de consulta para implementar várias consultas complexas. Sintaxe:

{ <campo1>: { <operador1>: <valor1> }, ... }

Explicação:

  • campo1: nome do campo
  • operador1: operador
  • valor1: parâmetro do operador

Exemplo do operador $in:

db.inventory.find( { status: { $in: [ "A", "D" ] } } )

Similar à seguinte consulta SQL com o operador "in":

SELECT * FROM inventory WHERE status in ("A", "D")

Observação: Para detalhes sobre os operadores, consulte a seção de detalhes da consulta do MongoDB subsequente.

Condição and

Similar ao SQL, o MongoDB também suporta a condição and.

Exemplo:

// Inserir múltiplas condições consecutivamente e conectar as condições usando and
db.inventory.find( { status: "A", item: "postcard"} )

Similar à seguinte declaração SQL:

SELECT * FROM inventory WHERE status = "A" AND item = "postcard"

Condição or

Similar ao SQL, o MongoDB também suporta a condição or, que é implementada através do operador $or.

Sintaxe:

{
	$or: [
		{condição1},
		{condição2},
		.....
	]
}

Exemplo:

db.inventory.find( { $or: [ { status: "A" }, { item: "postcard"} ] } )

Similar à seguinte declaração SQL:

SELECT * FROM inventory WHERE status = "A" OR item = "postcard"

Combinando condições and e or

Similar ao SQL, o MongoDB pode combinar condições de consulta complexas usando and e or.

Exemplo:

db.inventory.find( {
     status: "A",
     $or: [ { qty: { $lt: 30 } }, { item: /^p/ } ]
} )

Aqui, o operador $lt para menor que e a correspondência de expressão regular são usados.

Isso é similar à seguinte declaração SQL:

SELECT * FROM inventory WHERE status = "A" AND ( qty  < 30 or item like 'p%')

Dica: Para uma explicação detalhada das condições de consulta do MongoDB, consulte os capítulos subsequentes.