Visão geral
Neste guia, você pode aprender como usar o Django MongoDB Backend para especificar uma query de banco de dados .
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 de pesquisa 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 Django MongoDB Backend para procurar documentos com uma correspondência exata à sua query, ou você pode compor filtros de query para expressar critérios de correspondência mais complexos.
API de Consulta
A API Django QuerySet
fornece métodos que permitem recuperar objetos de modelo. Para executar uma query de banco de dados MongoDB , chame os métodos QuerySet
no gerenciador do seu modelo. A classe Manager
lida com operações de banco de dados e permite que você interaja com os dados do MongoDB fazendo referência a modelos do Django. Por padrão, o Django adiciona um Manager
denominado objects
a cada classe de modelo.
Quando você atribui um QuerySet
a uma variável, o Django MongoDB Backend não executa a operação até que você avalie a variável. Depois de avaliar QuerySet
, o Django salva os resultados da query no cache QuerySet
. Futuras avaliações do QuerySet
usam os resultados em cache.
Dica
Para saber mais sobre a API do Django QuerySet
, consulte QuerySet
na documentação do Django.
Dados de amostra
Os exemplos neste guia usam o Movie
modelo, que representa a sample_mflix.movies
collection dos conjuntos de dados de amostra do Atlas . O modelo Movie
contém um modelo Award
incorporado como valor de seu campo awards
. Essas classes de modelo têm as seguintes definições:
from django.db import models from django_mongodb_backend.models import EmbeddedModel from django_mongodb_backend.fields import EmbeddedModelField, ArrayField class Award(EmbeddedModel): wins = models.IntegerField(default=0) nominations = models.IntegerField(default=0) text = models.CharField(max_length=100) class Movie(models.Model): title = models.CharField(max_length=200) plot = models.TextField(blank=True) runtime = models.IntegerField(default=0) released = models.DateTimeField("release date", null=True, blank=True) awards = EmbeddedModelField(Award) genres = ArrayField(models.CharField(max_length=100), null=True, blank=True) imdb = models.JSONField(null=True) class Meta: db_table = "movies" managed = False def __str__(self): return self.title
O modelo Movie
inclui uma classe Meta
interna, que especifica os metadados do modelo, e um método __str__()
, que define a representação de string do modelo. Para saber mais sobre essas funcionalidades de modelo, consulte Definir um modelo no guia Criar modelos.
Exemplos de código de execução
Você pode usar o shell interativo do Python para executar os exemplos de código. Para entrar na shell, execute o seguinte comando no diretório raiz do seu projeto:
python manage.py shell
Depois de inserir o shell do Python, certifique-se de importar os seguintes modelos e módulos:
from <your application name>.models import Movie, Award from django.utils import timezone from datetime import datetime
Para saber como criar um aplicação Django que use o modelo Movie
e o shell interativo Python para interagir com documentos do MongoDB, acesse o tutorial de Introdução.
Executar uma consulta
Para executar uma query de seus dados do MongoDB , chame um método QuerySet
no gerenciador do seu modelo e especifique seus critérios correspondentes em um filtro de query.
Esta seção descreve como usar os seguintes métodos da API QuerySet
:
Recuperar todos os documentos
Para recuperar todos os documentos de uma collection, chame o método all()
no gerenciador do seu modelo.
O exemplo a seguir chama o método all()
para recuperar todos os documentos na coleção sample_mflix.movies
:
Movie.objects.all()
<QuerySet [<Movie: The Great Train Robbery>, <Movie: A Corner in Wheat>, <Movie: Winsor McCay, the Famous Cartoonist of the N.Y. Herald and His Moving Comics>, <Movie: Traffic in Souls>, <Movie: Gertie the Dinosaur>, <Movie: In the Land of the Head Hunters>, <Movie: The Perils of Pauline>, <Movie: The Italian>, <Movie: Regeneration>, <Movie: Civilization>, '...(remaining elements truncated)...']>
Recuperar documentos correspondentes
Para fazer query de uma coleção para documentos que correspondam a um conjunto de critérios, chame o método filter()
no gerenciador do seu modelo. Passe um filtro de query para o método filter()
que especifica seus critérios de query.
O exemplo a seguir chama o método filter()
para fazer query da collection sample_mflix.movies
para documentos que tenham um valor runtime
de 300
:
Movie.objects.filter(runtime=300)
<QuerySet [<Movie: Wild Palms>, <Movie: Streets of Laredo>, <Movie: The Way We Live Now>]>
Retrieve One Document
Para recuperar um documento de uma coleção, chame o método get()
no gerenciador do seu modelo. Passe um filtro de query para o método get()
que especifica seus critérios de query.
Importante
O exemplo a seguir chama o método get()
para recuperar um documento que tem um valor title
de "Finding Nemo"
:
Movie.objects.get(title="Finding Nemo")
<Movie: Finding Nemo>
Excluir Documentos Correspondentes
Para fazer query de uma coleção de documentos que não atendem aos seus critérios de pesquisa, chame o método exclude()
no gerenciador do seu modelo. Passe os critérios de exclusão como um argumento para o método exclude()
.
O exemplo a seguir chama o método exclude()
para excluir documentos lançados antes de datetime(1980, 1, 1)
(janeiro de 1, 1980) dos resultados:
Movie.objects.exclude(released__lt=timezone.make_aware(datetime(1980, 1, 1)))
<QuerySet [<Movie: The Iron Horse>, <Movie: Le grand jeu>, <Movie: The Devil Is a Woman>, <Movie: Children in the Wind>, <Movie: Too Much Johnson>, <Movie: Dots>, <Movie: The Blood of Jesus>, <Movie: The Land>, <Movie: The Brothers and Sisters of the Toda Family>, <Movie: Begone Dull Care>, '...(remaining elements truncated)...']>
Dica
O exemplo anterior utiliza a pesquisa do campo lt
para consultar a coleção. Para saber mais sobre pesquisas de comparação, consulte a seção Usar pesquisas de comparação neste guia.
Executar queries de banco de dados brutas
Se quiser executar queries complexas que a API de query do Django não suporta, você pode usar o método raw_aggregate()
. Esse método permite que você especifique seus critérios de query em um agregação pipeline do MongoDB , que você passa como argumento para raw_aggregate()
.
Para saber como executar queries de banco de dados bruto, consulte o guia Executar queries de banco de dados bruto.
Personalize seu filtro de query
Você pode refinar ainda mais seus critérios de query usando uma pesquisa de campo em seu filtro de query. As pesquisas de campo permitem esclarecer a relacionamento entre o campo que você está consultando e o valor para o qual deseja consultar. Use a seguinte sintaxe para especificar uma pesquisa de campo :
Model.objects.filter(<field name>__<lookup type>=<value>)
Você pode usar diferentes tipos de pesquisa para executar queries avançadas, como correspondência parcial de texto, queries de elementos de array, correspondência de expressão regulares e correspondência de valores de ano para campos de data e hora.
Dica
Para visualizar uma lista completa de tipos de pesquisa, consulte Pesquisas de campo na referência da API do Django do QuerySet
.
Esta seção descreve como refinar seus filtros de query das seguintes maneiras:
Usar pesquisas de correspondência de texto
A tabela a seguir descreve alguns dos tipos de pesquisa que você pode usar para executar queries que incluem critérios correspondentes específicos para valores de texto:
Tipo de pesquisa | Descrição |
---|---|
| Specifies an exact text match. If you do not provide a
lookup type in your query filter, Django MongoDB Backend uses this
type by default. You can specify a case-insensitive exact text match
by using iexact . |
| Specifies a partial text match. You can specify a case-insensitive partial text match
by using icontains . |
| Matches field values that begin with the specified text. You can specify a case-insensitive partial text match
by using istartswith . |
| Matches field values that end with the specified text. You can specify a case-insensitive partial text match
by using iendswith . |
Exemplo
O exemplo a seguir usa a pesquisa contains
para fazer query de documentos nos quais o valor plot
inclui o texto "coming-of-age"
:
Movie.objects.filter(plot__contains="coming-of-age")
<QuerySet [<Movie: Murmur of the Heart>, <Movie: Desert Bloom>, <Movie: Girls Town>, <Movie: Get Real>, <Movie: Man of Steel>, <Movie: The Holy Land>, <Movie: Secondhand Lions>, <Movie: How to Be Louise>, <Movie: Mouth to Mouth>, <Movie: Che ne sarè di noi>, <Movie: Roll Bounce>, '...(remaining elements truncated)...']>
Usar pesquisas de comparação
A tabela a seguir descreve alguns dos tipos de pesquisa que você pode usar para executar queries que avaliam um valor de campo em relação a um valor especificado:
Tipo de pesquisa | Descrição |
---|---|
| Matches field values that are greater than the
specified value. |
| Matches field values that are greater than or equal
to the specified value. |
| Matches field values that are less than the specified
value. |
| Matches field values that are less or equal to than the specified
value. |
Exemplo
O exemplo a seguir usa a pesquisa lte
para fazer query de documentos nos quais o valor runtime
é menor ou igual a 50
:
Movie.objects.filter(runtime__lte=50)
<QuerySet [<Movie: The Great Train Robbery>, <Movie: A Corner in Wheat>, <Movie: Winsor McCay, the Famous Cartoonist of the N.Y. Herald and His Moving Comics>, <Movie: Gertie the Dinosaur>, <Movie: From Hand to Mouth>, <Movie: High and Dizzy>, <Movie: One Week>, <Movie: Now or Never>, '...(remaining elements truncated)...']>
Combinar pesquisas
Você pode executar queries que usam vários conjuntos de critérios correspondentes das seguintes maneiras:
Passe vários filtros de query para o seu método de query, separados por vírgulas. Para ver um exemplo, consulte Recuperando objetos na documentação do Django.
Encadeie métodos de query juntos. Para saber mais, consulte Encadeamento de filtros na documentação do Django.
Use
Q
objetos e separe cada objeto com um operador lógico. Para saber mais, consulte Pesquisas complexas com objetos Q na documentação do Django.
Exemplo de objeto Q
Você pode usar objetos Q
para executar queries com vários conjuntos de critérios correspondentes. Para criar um objeto Q
, passe o filtro de query para o método Q()
. Você pode passar vários objetos Q
como argumentos para seu método de query e separar cada objeto Q
por um operador OR (|
), AND (&
) ou XOR (^
). Você também pode negar objetos Q
prefixando-os com o símbolo ~
.
Este exemplo utiliza objetos Q
para fazer query de documentos que atendam às seguintes condições de query:
title
o valor do campo começa com o texto"Funny"
ou"Laugh"
genres
o campo da array não contém o valor"Comedy"
Movie.objects.filter( (Q(title__startswith="Funny") | Q(title__startswith="Laugh")) & ~Q(genres__contains=["Comedy"]) )
<QuerySet [<Movie: Laugh, Clown, Laugh>, <Movie: Funny Games>]>
Dica
O exemplo anterior utiliza uma pesquisa de campo em um valor ArrayField
. Para obter mais informações sobre a query de um ArrayField
, consulte a seção Consultar valores de array neste guia.
Modificar Resultados da Query
Esta seção descreve como modificar os resultados da query das seguintes maneiras:
Classificar resultados
Você pode fornecer uma ordem de classificação para os resultados da query usando o método order_by()
. Para especificar uma classificação ascendente com base nos valores de um determinado campo, passe o nome do campo como argumento. Para especificar uma classificação decrescente, passe o nome do campo prefixado com um símbolo de menos (-
) como argumento.
Você pode passar vários nomes de campo , separados por vírgulas, para o método order_by()
. O Django MongoDB Backend classifica os resultados de cada campo na ordem fornecida.
Exemplo
Este exemplo executa as seguintes ações:
Chama o método
filter()
no gerenciador do modeloMovie
para consultar a coleçãosample_mflix.movies
Faz a query de documentos que têm um valor de
title
começando com o texto"Rocky"
Classifica os resultados em ordem crescente de seus valores de campo
released
Movie.objects.filter(title__startswith="Rocky").order_by("released")
<QuerySet [<Movie: Rocky>, <Movie: Rocky II>, <Movie: Rocky III>, <Movie: Rocky IV>, <Movie: Rocky V>, <Movie: Rocky Marciano>, <Movie: Rocky Balboa>]>
Ignorar e limitar resultados
Você pode especificar o número de resultados que uma query retorna usando a sintaxe de fatia de matriz do Python, conforme mostrado no código a seguir:
Model.objects.filter(<query filter>)[<start>:<end>]
Substitua os placeholders <start>
e <end>
por valores inteiros que representam o subconjunto de resultados que você deseja retornar. O valor inicial é exclusivo e o valor final é inclusivo.
Se você omitir o valor <start>
, a query retornará cada resultado, começando com a primeira correspondência, até retornar o número especificado pelo valor <end>
.
Se você omitir o valor do <end>
, a query retornará cada resultado, mas ignorará o número de resultados iniciais especificado por <start>
.
Exemplo
Este exemplo executa as seguintes ações:
Chama o método
filter()
no gerenciador do modeloMovie
para consultar a coleçãosample_mflix.movies
Consulta documentos com um valor
released
dedatetime(2010, 7, 16)
(16 de julho 2010)Retorna o terceiro e o quarto resultados
Movie.objects.filter(released=timezone.make_aware(datetime(2010, 7, 16)))[2:4]
<QuerySet [<Movie: Inception>, <Movie: Winter's Bone>]>
Recuperar o primeiro resultado
Para recuperar o primeiro resultado de uma query que pode corresponder a vários resultados, encadeie o método first()
ao método filter()
. Passe um filtro de query para o método filter()
que especifica seus critérios de query.
O exemplo a seguir chama os métodos filter()
e first()
para consultar a coleção sample_mflix.movies
para o primeiro documento no qual o valor genres
é ["Crime", "Comedy"]
:
Movie.objects.filter(genres=["Crime", "Comedy"]).first()
<Movie: The Crew>
Queries de campo avançadas
Esta seção descreve como executar queries nos seguintes campos:
Consultar valores de modelos incorporados
Você pode executar operações em seu modelo que consultam campos de modelos incorporados. Para executar query desses campos, especifique o campo do modelo e cada nome de campo incorporado separados por sublinhados duplos (__
) até chegar ao campo que deseja executar a query, conforme mostrado no código a seguir:
Model.objects.filter(<model field>__<embedded model field>=<value>)
Você também pode usar pesquisas de campo para refinar sua query de modelo embarcado. Adicione seu tipo de pesquisa após o campo do modelo incorporado que você está consultando, prefixado por sublinhados duplos.
Exemplo
Este exemplo utiliza um lookup para consultar o modelo Award
, que está embutido no modelo Movie
. Este modelo incorporado representa o campo awards
na coleção sample_mflix.movies
e seus campos wins
, nominations
e text
aninhados. As seguintes queries de código para documentos em que o valor de campo aninhado awards.wins
é maior que 150
:
Movie.objects.filter(awards__wins__gt=150)
<QuerySet [<Movie: The Lord of the Rings: The Return of the King>, <Movie: No Country for Old Men>, <Movie: Slumdog Millionaire>, <Movie: Boyhood>, <Movie: The Social Network>, <Movie: Inception>, <Movie: Gravity>, <Movie: Gravity>, <Movie: The Artist>, <Movie: 12 Years a Slave>, <Movie: Birdman: Or (The Unexpected Virtue of Ignorance)>]>
Valores de array de query
Você pode fazer query dos dados armazenados em um valor ArrayField
usando a sintaxe de query padrão. O Django MongoDB Backend fornece tipos adicionais de pesquisa de campo para a consulta de valores ArrayField
, que são descritos na tabela a seguir:
Tipo de pesquisa | Descrição |
---|---|
| Matches fields that store the provided value as
a subset of their data. This ArrayField lookup overrides the
contains lookup described in the Use Text Match Lookups
section of this guide. |
| Matches fields that store a subset of the provided values.
This lookup type is the inverse of contains . |
| Matches field that store any of the provided values. |
| Matches fields that store the number of values provided. |
Exemplo
O exemplo seguinte utiliza a pesquisa overlap
para fazer query de documentos cujo campo genres
contém quaisquer valores na array ["Adventure", "Family"]
:
Movie.objects.filter(genres__overlap=["Adventure", "Family"])
<QuerySet [<Movie: The Poor Little Rich Girl>, <Movie: Robin Hood>, <Movie: Peter Pan>, <Movie: The Thief of Bagdad>, <Movie: Clash of the Wolves>, <Movie: Beau Geste>, <Movie: The Black Pirate>, <Movie: The Son of the Sheik>, <Movie: Steamboat Willie>, <Movie: The Big Trail>, <Movie: The Champ>, '...(remaining elements truncated)...']>
Valores de array de modelo incorporado de query
Dica
Os exemplos nesta seção usam as classes de modelo definidas na seção Armazenar Dados de Matriz de Modelo Incorporado do guia Criar Modelos.
Você pode executar operações em seu modelo que consultam campos de uma array de modelos embarcados. Essas queries usam a mesma sintaxe descrita na seção Consultar valores de modelo incorporados:
Model.objects.filter(<model field>__<embedded model field>=<value>)
Você também pode usar pesquisas de campo para refinar sua query de modelo embarcado. Adicione seu tipo de pesquisa após o campo do modelo incorporado que você está consultando, prefixado por sublinhados duplos. No entanto, você só pode usar os seguintes tipos de pesquisa para executar query de um campo incorporado:
exact
iexact
in
gt
gte
lt
lte
Importante
Se as instâncias do modelo incorporadas em seu EmbeddedModelArrayField
tiverem seus próprios campos de array incorporados, você não poderá executar query desses valores de campo aninhados.
Exemplo de transformação de comprimento
Você pode usar o tipo de pesquisa len
para filtrar pelo número de instâncias de modelo embarcadas em um valor EmbeddedModelArrayField
. Para refinar ainda mais sua query, você pode combinar a pesquisa len
com outras pesquisas de comparação.
Este exemplo utiliza a pesquisa len
para executar a query do campo cast
, que armazena uma array de modelos Actor
incorporados. As seguintes queries de código para documentos em que o comprimento da array cast
é maior que 5
:
Movie.objects.filter(cast__len__gt=5)
Exemplo de transformações de índice e fatia
Você pode usar as transformações de índice e fatia para consultar elementos de array específicos do seu EmbeddedModelArrayField
.
O exemplo a seguir especifica um índice de array para a query de documentos nos quais o primeiro elemento da array cast
tem um valor last_name
de "Winslet"
:
Movie.objects.filter(cast__0__last_name="Winslet")
Da mesma forma, o exemplo a seguir usa uma transformação de fatia para fazer query de documentos em que um dos três primeiros elementos da array cast
tem um valor last_name
de "Winslet"
:
Movie.objects.filter(cast__0_2__last_name="Winslet")
Valores de modelo incorporado polimórfico de query
Para query dados armazenados em um valor de PolymorphicEmbeddedModelField
, use a mesma sintaxe descrita na seção anterior Consultar valores de modelo incorporados. Você pode consultar campos compartilhados entre os modelos incorporados ou campos exclusivos a um modelo específico.
Importante
Evite nomes de campo conflitantes
Se você fizer query de um campo compartilhado entre vários modelos embarcados, mas que tenha tipos de dados diferentes, poderá ver resultados imprecisos. O Django não pode determinar corretamente qual tipo de dados atribuir ao valor de pesquisa. Nesse caso, o Django MongoDB Backend itera pelos modelos embarcados e usa o primeiro campo e o tipo de dados correspondente que encontra.
Da mesma forma, se você fizer query de um campo de modelo incorporado aninhado que tenha o mesmo nome e tipo de dados em vários modelos, o Django MongoDB Backend consultará somente o primeiro modelo listado em sua definição do PolymorphicEmbeddedModelField
.
Exemplos
Dica
Os exemplos a seguir usam as classes de modelo definidas na seção Armazenar dados de modelo polimórficos incorporados do guia Criar modelos.
Este exemplo utiliza um lookup para consultar o campo awards
, que pode armazenar modelos embarcados do tipo Oscar
ou GoldenGlobe
. O código faz query de documentos que tenham um valor awards.wins
de 10
, que possam corresponder aos documentos representados por qualquer tipo de modelo incorporado:
Movie.objects.filter(awards__wins=10)
Você também pode consultar campos que não são compartilhados entre os modelos embarcados. O seguinte exemplo consulta o campo awards.best_picture
, que é exclusivo para o modelo incorporado Oscar
:
Movie.objects.filter(awards__best_picture=True)
Valores de array de modelo incorporado polimórfico de query
Para query dados armazenados em um valor de PolymorphicEmbeddedModelArrayField
, use a mesma sintaxe e operadores descritos na seção Consultar valores de array de modelo incorporado. Você pode consultar campos compartilhados entre os modelos incorporados ou campos exclusivos a um modelo específico.
Importante
Evite nomes de campo conflitantes
Se você fizer query de um campo compartilhado entre vários modelos embarcados, mas que tenha tipos de dados diferentes, poderá ver resultados imprecisos. O Django não pode determinar corretamente qual tipo de dados atribuir ao valor de pesquisa. Nesse caso, o Django MongoDB Backend itera pelos modelos embarcados e usa o primeiro campo e o tipo de dados correspondente que encontra.
Da mesma forma, se você fizer query de um campo de modelo incorporado aninhado que tenha o mesmo nome e tipo de dados em vários modelos, o Django MongoDB Backend consultará somente o primeiro modelo listado em sua definição do PolymorphicEmbeddedModelArrayField
.
Exemplo
Dica
O exemplo a seguir usa as classes de modelo definidas na seção Armazenar dados de array de modelo polimórfico do guia Criar modelos.
Este exemplo utiliza uma pesquisa para consultar o campo awards
, que armazena uma array de modelos embarcados do tipo Oscar
ou GoldenGlobe
. O código faz query de documentos que tenham um valor de awards.year
menor que 2000
, que possam corresponder a documentos representados por qualquer tipo de modelo incorporado.
Movie.objects.filter(awards__year__lt=2000)
Query JSON Values
Você pode fazer uma query dos dados armazenados em um valor JSONField
usando a mesma sintaxe mostrada na seção Consultar valores de modelo incorporados. Encadeie cada campo e nome de campo aninhado juntos, separados por sublinhados duplos (__
), até chegar ao campo que deseja fazer query.
O exemplo a seguir consulta o campo imdb
com valor JSONField
para valores de seu campo votes
aninhado que excedem 900000
:
Movie.objects.filter(imdb__votes__gt=900000)
<QuerySet [<Movie: La nao capitana>, <Movie: The Godfather>, <Movie: This Is Spinal Tap>, <Movie: Forrest Gump>, <Movie: Pulp Fiction>, <Movie: The Shawshank Redemption>, <Movie: Se7en>, <Movie: The Lord of the Rings: The Fellowship of the Ring>, <Movie: The Matrix>, <Movie: Fight Club>, <Movie: The Lord of the Rings: The Return of the King>, <Movie: The Lord of the Rings: The Two Towers>, <Movie: The Shawshank Redemption>, <Movie: Landet som icke èr>, <Movie: The Dark Knight>, <Movie: The Danish Girl>, <Movie: The Dark Knight Rises>, <Movie: Inception>, <Movie: Catching the Sun>, <Movie: Scouts Guide to the Zombie Apocalypse>, '...(remaining elements truncated)...']>
Anote e filtre dados JSON
Você pode utilizar expressões do KT()
para anotar e filtrar dados armazenados em um valor do JSONField
. As expressões KT()
permitem trabalhar com o valor de texto de chaves, índices ou transformações de caminho em um JSONField
. Passe sua expressão KT()
para o método annotate()
, que anota cada objeto no QuerySet
com as expressões KT()
fornecidas.
Dica
O exemplo seguinte utiliza annotate()
e KT()
para criar uma nova chave score
, que armazena valores de campo aninhados imdb.rating
. Em seguida, o código classifica cada documento na coleção sample_mflix.movies
por seus valores score
descendentes:
from django.db.models.fields.json import KT Movie.objects.annotate(score=KT("imdb__rating")).all().order_by("-score")
<QuerySet [<Movie: No Tomorrow>, <Movie: The Deposit>, <Movie: Man Down>, <Movie: Convenience>, <Movie: Scouts Guide to the Zombie Apocalypse>, <Movie: Another World>, <Movie: The Danish Girl>, <Movie: Ad Inexplorata>, <Movie: Landet som icke èr>, <Movie: The Ghost and the Whale>, <Movie: Coming to Terms>, <Movie: La nao capitana>, <Movie: All Eyes and Ears>, <Movie: Catching the Sun>, <Movie: Manhattan Romance>, <Movie: Anomalisa>, <Movie: Outliving Emily>, <Movie: Mary Loss of Soul>, <Movie: The Childhood of a Leader>, <Movie: Krot na more>, '...(remaining elements truncated)...']>
Valores de chave primária de query
Você pode usar o atalho de pesquisa pk
para consultar valores de chave primária , que o MongoDB armazena como valores ObjectId
.
O exemplo a seguir consulta a coleção sample_mflix.movies
para um documento cuja chave primária é ObjectId("573a1394f29313caabce0d37")
:
from bson import ObjectId Movie.objects.get(pk=ObjectId("573a1394f29313caabce0d37"))
// Your ObjectId values might differ <Movie: Vertigo>
O modelo Movie
, que representa a collection sample_mflix.movies
, usa o campo id
como sua chave primária. O exemplo seguinte constrói a mesma query do código anterior utilizando o campo id
:
from bson import ObjectId Movie.objects.get(id=ObjectId("573a1394f29313caabce0d37"))
Informações adicionais
Para saber como executar queries de banco de dados bruto usando a sintaxe de pipeline de agregação do MongoDB, consulte o guia Executar queries de banco de dados brutos.
Para saber como realizar outras QuerySet
operações, consulte o guia Executar operações CRUD.
Para saber mais sobre queries do Django, consulte Criando queries na documentação do Django.