Menu Docs

Página inicial do DocsDesenvolver aplicaçõesDrivers PythonPyMongo

Especificar uma query

Nesta página

  • Visão geral
  • Dados de amostra
  • Correspondência exata
  • Operadores de comparação
  • Operadores lógicos
  • Operadores de array
  • Operadores de elementos
  • Operadores de avaliação
  • Informações adicionais
  • Documentação da API

Neste guia, você pode aprender como especificar uma query usando o PyMongo.

Você pode refinar o conjunto de documentos que uma query retorna criando um filtro de query. Um filtro de query é uma expressão que especifica os critérios do Atlas Search que o MongoDB usa para corresponder a documentos em uma operação de leitura ou gravação. Em um filtro de query, você pode solicitar ao driver para Atlas Search documentos com uma correspondência exata à sua query, ou você pode compor filtros de query para Express critérios de correspondência mais complexos.

Os exemplos deste guia executam operações em uma collection chamada fruits que contém os seguintes documentos:

{ "_id": 1, "name": "apples", "qty": 5, "rating": 3, "color": "red", "type": ["fuji", "honeycrisp"] },
{ "_id": 2, "name": "bananas", "qty": 7, "rating": 4, "color": "yellow", "type": ["cavendish"] },
{ "_id": 3, "name": "oranges", "qty": 6, "rating": 2, "type": ["naval", "mandarin"] },
{ "_id": 4, "name": "pineapple", "qty": 3, "rating": 5, "color": "yellow" },

O exemplo de código a seguir mostra como criar um banco de dados e uma coleção e, em seguida, inserir os documentos de amostra em sua coleção:

from pymongo import MongoClient
uri = "<connection string URI>"
client = MongoClient(uri)
try:
database = client["sample_fruit"]
collection = database["fruits"]
collection.insert_many([
{ "_id": 1, "name": "apples", "qty": 5, "rating": 3, "color": "red", "type": ["fuji", "honeycrisp"] },
{ "_id": 2, "name": "bananas", "qty": 7, "rating": 4, "color": "yellow", "type": ["cavendish"] },
{ "_id": 3, "name": "oranges", "qty": 6, "rating": 2, "type": ["naval", "mandarin"] },
{ "_id": 4, "name": "pineapple", "qty": 3, "rating": 5, "color": "yellow" },
])
client.close()
except Exception as e:
raise Exception("Error inserting documents: ", e)

Consultas de valor literal retornam documentos com uma correspondência exata ao seu filtro de consulta.

O exemplo seguinte especifica um filtro de consulta como um parâmetro para o método find() . O código retorna todos os documentos com um valor de campo color de "yellow":

results = collection.find({ "color": "yellow" })
{'_id': 2, 'name': 'bananas', 'qty': 7, 'rating': 4, 'color': 'yellow', 'type': ['cavendish']}
{'_id': 4, 'name': 'pineapple', 'qty': 3, 'rating': 5, 'color': 'yellow'}

Dica

Localizar todos os documentos

Para encontrar todos os documentos em uma coleção, chame o método find() e passe um filtro de query vazio. O exemplo a seguir encontra todos os documentos em uma collection:

results = collection.find({})

Os operadores de comparação avaliam um valor de campo de documento em relação a um valor especificado em seu filtro de query. Veja a seguir uma lista de operadores de comparação comuns:

  • $gt: Maior que

  • $lte: Menor ou Igual

  • $ne: Diferente

Para visualizar uma lista completa de operadores de comparação, consulte o guia Operadores de query de comparação no manual do MongoDB Server .

O exemplo a seguir especifica um operador de comparação em um filtro de query como um parâmetro para o método find() . O código retorna todos os documentos com um valor de campo rating maior que 2:

results = collection.find({ "rating": { "$gt" : 2 }})
for f in results:
print(f)
{'_id': 1, 'name': 'apples', 'qty': 5, 'rating': 3, 'color': 'red', 'type': ['fuji', 'honeycrisp']}
{'_id': 2, 'name': 'bananas', 'qty': 7, 'rating': 4, 'color': 'yellow', 'type': ['cavendish']}
{'_id': 4, 'name': 'pineapple', 'qty': 3, 'rating': 5, 'color': 'yellow'}

Os operadores lógicos correspondem aos documentos usando lógica aplicada aos resultados de dois ou mais conjuntos de expressões. Veja a seguir uma lista de operadores lógicos:

  • $and, que retorna todos os documentos que correspondem às condições de todas as cláusulas

  • $or, que retorna todos os documentos que correspondem às condições de uma cláusula

  • $nor, que retorna todos os documentos que não correspondem às condições de nenhuma cláusula

  • $not, que retorna todos os documentos que não correspondem à expressão

Para saber mais sobre operadores lógicos, consulte o guia Operadores lógicos de query no manual do MongoDB Server .

O exemplo seguinte especifica um operador lógico em um filtro de query como um parâmetro para o método find() . O código retorna todos os documentos com um valor de campo qty maior que 5 ou um valor de campo color de "yellow":

results = collection.find({
"$or": [
{ "qty": { "$gt": 5 }},
{ "color": "yellow" }
]
})
for f in results:
print(f)
{'_id': 2, 'name': 'bananas', 'qty': 7, 'rating': 4, 'color': 'yellow', 'type': ['cavendish']}
{'_id': 3, 'name': 'oranges', 'qty': 6, 'rating': 2, 'type': ['naval', 'mandarin']}
{'_id': 4, 'name': 'pineapple', 'qty': 3, 'rating': 5, 'color': 'yellow'}

Os operadores de array correspondem aos documentos com base no valor ou na quantidade de elementos em um campo de array. A seguir está uma lista dos operadores de array disponíveis:

  • $all, que retorna documentos com arrays que contêm todos os elementos da query

  • $elemMatch, que retorna documentos se um elemento em seu campo de array corresponder a todas as condições na query

  • $size, que retorna todos os documentos com arrays de um tamanho especificado

Para saber mais sobre operadores de array, consulte o guia Operadores de query de array no manual do MongoDB Server .

O exemplo seguinte especifica um operador de array em um filtro de query como um parâmetro para o método find() . O código retorna todos os documentos com um campo de array type contendo 2 elementos:

results = collection.find({
"type" : { "$size": 2 }
})
for f in results:
print(f)
{'_id': 1, 'name': 'apples', 'qty': 5, 'rating': 3, 'color': 'red', 'type': ['fuji', 'honeycrisp']}
{'_id': 3, 'name': 'oranges', 'qty': 6, 'rating': 2, 'type': ['naval', 'mandarin']}

Os operadores de elemento consultam os dados com base na presença ou tipo de campo.

Para saber mais sobre os operadores de elementos, consulte o guia Operadores de query de elementos no manual do MongoDB Server .

O exemplo seguinte especifica um operador de elemento em um filtro de query como um parâmetro para o método find() . O código retorna todos os documentos que têm um campo color :

results = collection.find( { "color" : { "$exists": "true" }} )
for f in results:
print(f)
{'_id': 1, 'name': 'apples', 'qty': 5, 'rating': 3, 'color': 'red', 'type': ['fuji', 'honeycrisp']}
{'_id': 2, 'name': 'bananas', 'qty': 7, 'rating': 4, 'color': 'yellow', 'type': ['cavendish']}
{'_id': 4, 'name': 'pineapple', 'qty': 3, 'rating': 5, 'color': 'yellow'}

Os operadores de avaliação retornam dados com base em avaliações de campos individuais ou documentos de toda a coleção.

Veja a seguir uma lista de operadores de avaliação comuns:

  • $text, que executa um Atlas Search de texto nos documentos

  • $regex, que retorna documentos que correspondem a uma expressão regular especificada

  • $mod, que executa uma operação de módulo no valor de um campo e retorna documentos em que o restante é um valor especificado

Para visualizar uma lista completa de operadores de avaliação, consulte o guia Operadores de query de avaliação no manual do MongoDB Server .

O exemplo seguinte especifica um operador de avaliação em um filtro de query como um parâmetro para o método find() . O código usa uma expressão regular para retornar todos os documentos com um valor de campo name que tenha pelo menos dois "p" caracteres consecutivos:

results = collection.find({ "name" : { "$regex" : "p{2,}" }} )
for f in results:
print(f)
{'_id': 1, 'name': 'apples', 'qty': 5, 'rating': 3, 'color': 'red', 'type': ['fuji', 'honeycrisp']}
{'_id': 4, 'name': 'pineapple', 'qty': 3, 'rating': 5, 'color': 'yellow'}

Para saber mais sobre como query documentos, consulte o guia Consultar documentos no manual do MongoDB Server .

Para saber mais sobre como recuperar documentos com o PyMongo, consulte Recuperar dados.

Para saber mais sobre qualquer um dos métodos ou tipos discutidos neste guia, consulte a seguinte documentação da API:

← Ler dados do MongoDB