개요
이 가이드 에서는 Django MongoDB 백엔드를 사용하여 데이터베이스 쿼리 지정하는 방법을 학습 수 있습니다.
쿼리 필터하다 만들어 쿼리 반환하는 문서 설정하다 를 구체화할 수 있습니다. 쿼리 필터하다 는 MongoDB 읽기 또는 쓰기 (write) 작업에서 문서를 일치시키는 데 사용하는 검색 기준을 지정하는 표현식 입니다. 쿼리 필터하다 에서는 Django MongoDB 백엔드에 쿼리 와 정확히 일치하는 문서를 검색 하도록 프롬프트를 표시하거나 쿼리 필터를 작성하여 보다 복잡한 일치 기준을 Express 수 있습니다.
Query API
장고 QuerySet
API 모델 객체를 조회 할 수 있는 메서드를 제공합니다. MongoDB database 쿼리 실행 하려면 모델 관리자에서 QuerySet
메서드를 호출합니다. Manager
클래스는 데이터베이스 작업을 처리하고 Django 모델을 참조하여 MongoDB 데이터와 상호 작용 있도록 합니다. 기본값 으로 Django는 모든 모델 클래스에 objects
라는 이름의 Manager
를 추가합니다.
변수에 QuerySet
을(를) 할당하면 Django MongoDB 백엔드는 변수를 평가할 때까지 작업을 수행하지 않습니다. QuerySet
를 평가한 후 Django는 쿼리 결과를 QuerySet
캐시 에 저장합니다. QuerySet
의 향후 평가에서는 캐시된 결과를 사용합니다.
팁
장고 QuerySet
API 에 대해 QuerySet
자세히 학습 장고 문서에서 를 참조하세요.
샘플 데이터
이 Movie
가이드 의 sample_mflix.movies
예제에서는 Atlas 샘플 데이터 세트의 컬렉션 나타내는 모델을 사용합니다. Movie
모델에는 awards
필드 값으로 임베디드 Award
모델이 포함되어 있습니다. 이러한 모델 클래스에는 다음과 같은 정의가 있습니다.
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
Movie
모델에는 모델 메타데이터 지정하는 내부 Meta
클래스와 모델의 문자열 표현을 정의하는 __str__()
메서드가 포함되어 있습니다. 이러한 모델 기능에 대해 학습 모델 생성 가이드 의모델 정의를 참조하세요.
코드 예제 실행
Python 대화 셸 사용하여 코드 예제를 실행 수 있습니다. 셸 에 들어가려면 프로젝트의 루트 디렉토리 에서 다음 명령을 실행 .
python manage.py shell
Python 셸 입력한 후 다음 모델 및 모듈을 가져와야 합니다.
from <your application name>.models import Movie, Award from django.utils import timezone from datetime import datetime
Movie
모델과 Python 인터랙티브 셸 사용하여 MongoDB 문서와 상호 작용 장고 애플리케이션 만드는 방법을 학습하려면 시작하기 튜토리얼을 참조하세요.
쿼리 실행
MongoDB 데이터를 쿼리 하려면 모델 관리자에서 QuerySet
메서드를 호출하고 쿼리 필터하다 에 일치 기준을 지정합니다.
이 섹션에서는 QuerySet
API 에서 다음 메서드를 사용하는 방법을 설명합니다.
모든 문서 검색
컬렉션 에서 모든 문서를 조회 하려면 모델 관리자에서 all()
메서드를 호출합니다.
다음 예시 all()
메서드를 호출하여 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)...']>
일치하는 문서 조회
기준의 설정하다 과 일치하는 문서에 대한 컬렉션 쿼리 하려면 모델 관리자에서 filter()
메서드를 호출합니다. 쿼리 기준을 지정하는 filter()
메서드에 쿼리 필터하다 전달합니다.
다음 예시 filter()
메서드를 호출하여 sample_mflix.movies
컬렉션 에서 runtime
값이 300
인 문서를 쿼리 .
Movie.objects.filter(runtime=300)
<QuerySet [<Movie: Wild Palms>, <Movie: Streets of Laredo>, <Movie: The Way We Live Now>]>
Retrieve One Document
컬렉션 에서 하나의 문서 조회 하려면 모델 관리자에서 get()
메서드를 호출합니다. 쿼리 기준을 지정하는 get()
메서드에 쿼리 필터하다 전달합니다.
중요
쿼리 일치하는 문서가 없거나 여러 문서와 일치하는 경우 get()
메서드는 오류를 생성합니다. 여러 문서와 일치할 수 있는 쿼리 에서 하나 문서 조회 하려면 first() 메서드를 사용합니다.
다음 예시 get()
메서드를 호출하여 title
값이 "Finding Nemo"
인 문서 하나를 조회 합니다.
Movie.objects.get(title="Finding Nemo")
<Movie: Finding Nemo>
일치하는 문서 제외
검색 기준을 충족하지 않는 문서에 대한 컬렉션 쿼리 하려면 모델 관리자에서 exclude()
메서드를 호출합니다. 제외 기준을 exclude()
메서드에 인수로 전달합니다.
다음 예시 exclude()
메서드를 호출하여 datetime(1980, 1, 1)
(1, 1980) 이전에 릴리스된 문서를 결과에서 제외합니다.
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)...']>
팁
앞의 예시 에서는 lt
필드 조회를 사용하여 컬렉션 쿼리 . 비교 조회에 대해 자세히 학습 이 가이드 의 비교 조회 사용 섹션을 참조하세요.
원시 데이터베이스 쿼리 실행
장고의 쿼리 API 지원 하지 않는 복잡한 쿼리를 실행 하려면 raw_aggregate()
메서드를 사용하면 됩니다. 이 메서드를 사용하면 raw_aggregate()
에 인수로 전달하는 MongoDB 집계 파이프라인 에서 쿼리 기준을 지정할 수 있습니다.
쿼리 필터 사용자 지정
쿼리 필터하다 에서 필드 조회를 사용하여 쿼리 기준을 더욱 세분화할 수 있습니다. 필드 조회를 사용하면 쿼리하려는 필드 와 쿼리 하려는 값 간의 관계 명확히 할 수 있습니다. 필드 조회를 지정하려면 다음 구문을 사용합니다.
Model.objects.filter(<field name>__<lookup type>=<value>)
다양한 조회 유형을 사용하여 날짜/시간 필드에 대한 부분 텍스트 일치, 배열 요소 쿼리, 정규 표현식 일치, 연도 값 일치와 같은 고급 쿼리를 수행할 수 있습니다.
팁
조회 유형의 전체 목록을 보려면 QuerySet
장고 API 참조에서 필드 조회를 참조하세요.
이 섹션에서는 다음과 같은 방법으로 쿼리 필터를 구체화하는 방법을 설명합니다.
텍스트 일치 조회 사용
다음 표에서는 텍스트 값에 대한 특정 일치 기준이 포함된 쿼리를 실행 데 사용할 수 있는 몇 가지 조회 유형에 대해 설명합니다.
조회 유형 | 설명 |
---|---|
| 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 . |
예시
다음 예시 contains
조회를 사용하여 plot
값에 "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)...']>
비교 조회 사용
다음 표에서는 지정된 값에 대해 필드 값을 평가하는 쿼리를 실행 데 사용할 수 있는 몇 가지 조회 유형에 대해 설명합니다.
조회 유형 | 설명 |
---|---|
| 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. |
예시
다음 예시 lte
조회를 사용하여 runtime
값이 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)...']>
조회 결합
다음과 같은 방법으로 여러 일치 기준 세트를 사용하는 쿼리를 실행 수 있습니다.
쿼리 메서드에 여러 쿼리 필터를 쉼표로 구분하여 전달합니다. 예시 를 보려면 장고 문서에서 객체 조회하기를 참조하세요.
쿼리 메서드를 함께 연결합니다. 자세히 학습 장고 문서에서 필터 체인을 참조하세요.
Q
객체를 사용하고 각 객체 논리 연산자 로 구분합니다. 자세히 학습 장고 문서에서 Q 객체를 사용한 복합 조회를 참조하세요.
Q 객체 예제
Q
객체를 사용하여 여러 세트의 일치 기준으로 쿼리를 실행 수 있습니다. Q
객체 만들려면 쿼리 필터하다 Q()
메서드에 전달합니다. 여러 Q
객체를 쿼리 메서드에 인수로 전달하고 각 Q
객체 OR(|
), AND(&
) 또는 XOR(^
) 연산자 로 구분할 수 있습니다. ~
기호를 접두사로 붙여 Q
객체를 무효화할 수도 있습니다.
이 예시 Q
객체를 사용하여 다음 쿼리 조건을 충족하는 문서를 쿼리 .
title
필드 값이"Funny"
또는"Laugh"
텍스트로 시작합니다.genres
배열 필드 값이 포함되어 있지 않습니다."Comedy"
Movie.objects.filter( (Q(title__startswith="Funny") | Q(title__startswith="Laugh")) & ~Q(genres__contains=["Comedy"]) )
<QuerySet [<Movie: Laugh, Clown, Laugh>, <Movie: Funny Games>]>
팁
앞의 예시 ArrayField
값에 대한 필드 조회를 사용합니다. ArrayField
쿼리에 대한 자세한 내용은 이 가이드의 배열 값 쿼리 섹션을 참조하세요.
쿼리 결과 수정
이 섹션에서는 다음과 같은 방법으로 쿼리 결과를 수정하는 방법에 대해 설명합니다.
결과 정렬
order_by()
메서드를 사용하여 쿼리 결과에 대한 정렬 순서를 제공할 수 있습니다. 지정된 필드 의 값을 기준으로 오름차순 정렬을 지정하려면 필드 이름을 인수로 전달합니다. 내림차순 정렬을 지정하려면 빼기 기호(-
) 접두사가 붙은 필드 이름을 인수로 전달합니다.
쉼표로 구분하여 여러 필드 이름을 order_by()
메서드에 전달할 수 있습니다. Django MongoDB 백엔드는 각 필드 기준으로 제공된 순서대로 결과를 정렬합니다.
예시
이 예에서는 다음 조치를 수행합니다.
Movie
모델의 관리자에서filter()
메서드를 호출하여sample_mflix.movies
컬렉션 쿼리 .텍스트
"Rocky"
로 시작하는title
값을 가진 문서를 쿼리합니다.결과를
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>]>
결과 건너뛰기 및 제한
다음 코드와 같이 Python의 배열 슬라이싱 구문을 사용하여 쿼리 반환하는 결과 수를 지정할 수 있습니다.
Model.objects.filter(<query filter>)[<start>:<end>]
<start>
및 <end>
자리 표시자를 반환하려는 결과의 하위 집합을 나타내는 정수 값으로 바꿉니다. 시작 값은 배타적이며 끝 값은 포괄적입니다.
<start>
값을 생략하면 쿼리 첫 번째 일치 항목부터 시작하여 <end>
값으로 지정된 숫자를 반환할 때까지 각 결과를 반환합니다.
<end>
값을 생략하면 쿼리 각 결과를 반환하지만 <start>
에서 지정한 초기 결과 수를 건너뜁니다.
예시
이 예에서는 다음 조치를 수행합니다.
Movie
모델의 관리자에서filter()
메서드를 호출하여sample_mflix.movies
컬렉션 쿼리 .released
값이datetime(2010, 7, 16)
인 문서를 쿼리합니다(16, 2010 7월)세 번째 및 네 번째 결과를 반환합니다.
Movie.objects.filter(released=timezone.make_aware(datetime(2010, 7, 16)))[2:4]
<QuerySet [<Movie: Inception>, <Movie: Winter's Bone>]>
첫 번째 결과 조회
여러 결과와 일치할 수 있는 쿼리 에서 첫 번째 결과를 조회 하려면 first()
메서드를 filter()
메서드에 연결합니다. 쿼리 기준을 지정하는 filter()
메서드에 쿼리 필터하다 전달합니다.
다음 예시 filter()
및 first()
메서드를 호출하여 sample_mflix.movies
컬렉션 에서 genres
값이 ["Crime", "Comedy"]
인 첫 번째 문서 를 쿼리 .
Movie.objects.filter(genres=["Crime", "Comedy"]).first()
<Movie: The Crew>
고급 필드 쿼리
이 섹션에서는 다음 필드에 대해 쿼리를 실행 방법에 대해 설명합니다.
임베디드 모델 값 쿼리
모델에서 임베디드 모델의 필드를 쿼리 작업을 실행 수 있습니다. 이러한 필드를 쿼리 하려면 다음 코드와 같이 쿼리 하려는 필드 에 도달할 때까지 모델 필드 와 각 임베디드 필드 이름을 이중 밑줄(__
)로 구분하여 지정합니다.
Model.objects.filter(<model field>__<embedded model field>=<value>)
필드 조회를 사용하여 임베디드 모델 쿼리 구체화할 수도 있습니다. 쿼리하려는 임베디드 모델 필드 뒤에 이중 밑줄 접두사가 붙은 조회 유형을 추가합니다.
예시
이 예시 조회를 사용하여 Movie
모델에 포함된 Award
모델을 쿼리 . 이 임베디드 모델은 sample_mflix.movies
컬렉션 의 awards
필드 와 중첩된 wins
, nominations
및 text
필드를 나타냅니다. 다음 코드는 awards.wins
중첩 필드 값이 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)>]>
배열 값 쿼리
표준 쿼리 구문을 사용하여 ArrayField
값에 저장된 데이터를 쿼리 할 수 있습니다. 장고 MongoDB 백엔드는 ArrayField
값을 쿼리하기 위한 추가 필드 조회 유형을 제공하며, 이에 대한 설명은 다음 표에 설명되어 있습니다.
조회 유형 | 설명 |
---|---|
| 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. |
예시
다음 예시 overlap
조회를 사용하여 genres
필드 에 ["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)...']>
임베디드 모델 배열 값 쿼리
팁
이 섹션의 예제에서는 모델 만들기 가이드 의 임베디드 모델 배열 데이터 저장 섹션에 정의된 모델 클래스를 사용합니다.
모델에서 임베디드 모델 배열 의 필드를 쿼리 작업을 실행 수 있습니다. 이러한 쿼리는 임베디드 모델 값 쿼리 섹션에 설명된 것과 동일한 구문을 사용합니다.
Model.objects.filter(<model field>__<embedded model field>=<value>)
필드 조회 를 사용하여 임베디드 모델 쿼리 구체화할 수도 있습니다. 쿼리하려는 임베디드 모델 필드 뒤에 이중 밑줄을 붙인 조회 유형을 추가합니다. 그러나 포함된 필드 쿼리 데는 다음 조회 유형만 사용할 수 있습니다.
exact
iexact
in
gt
gte
lt
lte
중요
EmbeddedModelArrayField
에 포함된 모델 인스턴스에 자체 배열 필드가 포함된 경우 해당 중첩 필드 값을 쿼리 할 수 없습니다.
길이 변환 예제
len
조회 유형을 사용하여 EmbeddedModelArrayField
값에 포함된 모델 인스턴스 수를 기준으로 필터하다 할 수 있습니다. 쿼리 더욱 구체화하려면 len
조회를 다른 비교 조회와 결합할 수 있습니다.
이 예시 len
룩업을 사용하여 임베디드 Actor
모델의 배열 저장하는 cast
필드 쿼리 . 다음 코드는 cast
배열 의 길이가 5
보다 큰 문서를 쿼리합니다.
Movie.objects.filter(cast__len__gt=5)
인덱스 및 슬라이스 변환 예시
인덱스 및 슬라이스 변환을 사용하여 EmbeddedModelArrayField
의 특정 배열 요소를 쿼리 수 있습니다.
다음 예시 cast
배열 의 첫 번째 요소가 last_name
값이 "Winslet"
인 문서를 쿼리 할 배열 인덱스 지정합니다.
Movie.objects.filter(cast__0__last_name="Winslet")
마찬가지로 다음 예시 슬라이스 변환을 사용하여 cast
배열 의 처음 세 요소 중 하나의 last_name
값이 "Winslet"
인 문서를 쿼리 .
Movie.objects.filter(cast__0_2__last_name="Winslet")
다형성 임베디드 모델 값 쿼리
PolymorphicEmbeddedModelField
값에 저장된 데이터를 쿼리 하려면 앞의 임베디드 모델 값 쿼리 섹션에서 설명한 것과 동일한 구문을 사용합니다. 임베디드 모델 간에 공유되는 필드 또는 특정 모델에 고유한 필드 쿼리 할 수 있습니다.
중요
필드 이름 충돌 방지
여러 임베디드 모델 간에 공유되지만 데이터 유형이 다른 필드 쿼리 하면 부정확한 결과가 표시될 수 있습니다. Django는 조회 값에 할당할 데이터 유형 올바르게 결정할 수 없습니다. 이 경우 Django MongoDB 백엔드는 임베디드 모델을 반복하고 찾은 첫 번째 필드 와 해당 데이터 유형 사용합니다.
마찬가지로 여러 모델에서 이름과 데이터 유형 같은 중첩된 임베디드 모델 필드 쿼리 경우, Django MongoDB 백엔드는 PolymorphicEmbeddedModelField
정의에 나열된 첫 번째 모델만 쿼리합니다.
예시
팁
다음 예제에서는 모델 만들기 가이드 의 다형성 임베디드 모델 데이터 저장 섹션에 정의된 모델 클래스를 사용합니다.
이 예시 조회를 사용하여 Oscar
또는 GoldenGlobe
유형의 임베디드 모델을 저장 수 있는 awards
필드 쿼리 . 이 코드는 awards.wins
값이 10
인 문서를 쿼리하며, 이는 임베딩된 모델 유형으로 표시되는 문서와 일치할 수 있습니다.
Movie.objects.filter(awards__wins=10)
임베디드 모델 간에 공유되지 않는 필드를 쿼리 수도 있습니다. 다음 예시 Oscar
임베디드 모델에 고유한 awards.best_picture
필드 쿼리합니다.
Movie.objects.filter(awards__best_picture=True)
다형성 임베디드 모델 배열 값 쿼리
PolymorphicEmbeddedModelArrayField
값에 저장된 데이터를 쿼리 하려면 임베디드 모델 배열 값 쿼리 섹션에 설명된 것과 동일한 구문 및 연산자를 사용합니다. 임베디드 모델 간에 공유되는 필드 또는 특정 모델에 고유한 필드 쿼리 할 수 있습니다.
중요
필드 이름 충돌 방지
여러 임베디드 모델 간에 공유되지만 데이터 유형이 다른 필드 쿼리 하면 부정확한 결과가 표시될 수 있습니다. Django는 조회 값에 할당할 데이터 유형 올바르게 결정할 수 없습니다. 이 경우 Django MongoDB 백엔드는 임베디드 모델을 반복하고 찾은 첫 번째 필드 와 해당 데이터 유형 사용합니다.
마찬가지로 여러 모델에서 이름과 데이터 유형 같은 중첩된 임베디드 모델 필드 쿼리 경우, Django MongoDB 백엔드는 PolymorphicEmbeddedModelArrayField
정의에 나열된 첫 번째 모델만 쿼리합니다.
예시
팁
다음 예시 모델 만들기 가이드 의 다형성 임베디드 모델 배열 데이터 저장 섹션에 정의된 모델 클래스를 사용합니다.
이 예시 조회를 사용하여 Oscar
또는 GoldenGlobe
유형의 임베디드 모델 배열 을 저장하는 awards
필드 쿼리 . 이 코드는 awards.year
값이 2000
보다 작은 문서를 쿼리하며, 이는 임베딩된 모델 유형이 나타내는 문서와 일치할 수 있습니다.
Movie.objects.filter(awards__year__lt=2000)
Query JSON Values
임베디드 모델 값 쿼리 섹션에 표시된 것과 동일한 구문을 사용하여 값에 저장된 데이터를 쿼리 할 수 JSONField
있습니다. 쿼리 하려는 필드 에 도달할 때까지 각 필드 와 중첩된 필드 이름을 이중 밑줄(__
)로 구분하여 함께 연결합니다.
다음 예시 JSONField
값 imdb
필드 900000
를 초과하는 중첩된 votes
필드 의 값을 쿼리합니다.
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)...']>
JSON 데이터에 주석 달기 및 필터링
KT()
표현식을 사용하여 JSONField
값에 저장된 데이터에 주석을 달고 필터하다 할 수 있습니다. KT()
표현식을 사용하면 JSONField
내에서 키, 인덱스 또는 경로 변환의 텍스트 값으로 작업할 수 있습니다. KT()
표현식 annotate()
메서드에 전달하면 제공된 KT()
표현식으로 QuerySet
의 각 객체 에 주석을 답니다.
다음 예시 annotate()
및 KT()
를 사용하여 imdb.rating
중첩 필드 값을 저장하는 새 score
키를 만듭니다. 그런 다음 코드는 sample_mflix.movies
컬렉션 의 각 문서 내림차순 score
값을 기준으로 정렬합니다.
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)...']>
프라이머리 키 값 쿼리
pk
조회 단축키를 사용하여 MongoDB ObjectId
값으로 저장하는 기본 키 값을 쿼리 할 수 있습니다.
다음 예시 기본 키 ObjectId("573a1394f29313caabce0d37")
인 문서 에 대해 sample_mflix.movies
컬렉션 쿼리합니다.
from bson import ObjectId Movie.objects.get(pk=ObjectId("573a1394f29313caabce0d37"))
// Your ObjectId values might differ <Movie: Vertigo>
sample_mflix.movies
컬렉션 나타내는 Movie
모델은 id
필드 기본 키 사용합니다. 다음 예시 id
필드 사용하여 이전 코드와 동일한 쿼리 구성합니다.
from bson import ObjectId Movie.objects.get(id=ObjectId("573a1394f29313caabce0d37"))
추가 정보
MongoDB의 집계 파이프라인 구문을 사용하여 원시 데이터베이스 쿼리를 실행 방법을 학습 원시 데이터베이스 쿼리 수행 가이드 참조하세요.
다른 QuerySet
작업을 수행하는 방법을 학습 CRUD 작업 수행 가이드 참조하세요.
장고 쿼리에 대해 자세히 학습 장고 문서에서 쿼리 만들기를 참조하세요.