Overview
このガイドでは、Diango MongoDBバックエンド を使用してデータベースクエリを指定する方法を学習できます。
クエリフィルターを作成することで、クエリが返すドキュメントのセットを絞り込むことができます。クエリフィルターは、 MongoDB が読み取りまたは書込み (write)操作においてドキュメントを照合するために使用する検索条件を指定する式です。 クエリフィルターでは、Diango MongoDBバックエンド がクエリに完全に一致するドキュメントを検索するように要求することも、クエリフィルターを作成して、より複雑な一致条件をExpressこともできます。
クエリ API
Dlango QuerySet
API には、モデル オブジェクトを検索できるメソッドが用意されています。 MongoDBデータベースクエリを実行するには、モデルのマネージャーで QuerySet
メソッドを呼び出します。 Manager
クラスはデータベース操作を処理し、Diango モデルを参照してMongoDBデータを操作できます。 デフォルトでは 、Dhango は objects
という名前の Manager
をすべてのモデルクラスに追加します。
変数に QuerySet
を割り当てると、変数を評価するまで Diango MongoDBバックエンドは操作を実行しません。 QuerySet
を評価した後、Diango はクエリ結果を QuerySet
キャッシュに保存します。 QuerySet
の将来の評価では、キャッシュされた結果が使用されます。
Tip
DiangoQuerySet
APIの詳細については、DiangoQuerySet
ドキュメントの を参照してください。
サンプル データ
このガイドの例では、AtlasサンプルデータセットMovie
のsample_mflix.movies
コレクションを表す モデルを使用します。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
クラスと、モデルの string 表現を定義する __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ドキュメントを操作する Dlangoアプリケーションを作成する方法については、使い始める チュートリアルをご覧ください。
クエリの実行
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
コレクションから 1 つのドキュメントを取得するには、モデルのマネージャーで get()
メソッドを呼び出します。 クエリ条件を指定するクエリフィルターを get()
メソッドに渡します。
重要
クエリが 1 ドキュメントまたは複数のドキュメントに一致しない場合、get()
メソッドはエラーを生成します。 複数に一致する可能性のあるクエリから 1 つのドキュメントを検索するには、 first() メソッドを使用します。
次の例では、 get()
メソッドを呼び出して、title
の値が "Finding Nemo"
であるドキュメントを 1 つ取得します。
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)...']>
Raw データベースクエリの実行
Dpango のクエリAPI がサポートしていない複雑なクエリを実行する場合は、raw_aggregate()
メソッドを使用できます。 この方法を使用すると、 MongoDB集計パイプラインでクエリ条件を指定し、raw_aggregate()
に引数として渡します。
クエリフィルターをカスタマイズする
クエリフィルターでフィールドルックアップ を使用することで、クエリ条件をさらに絞り込むことができます。フィールドルックを使用すると、クエリするフィールドとクエリ対象の値との関係を明確に行うことができます。 フィールドルックアップを指定するには、次の構文を使用します。
Model.objects.filter(<field name>__<lookup type>=<value>)
さまざまなルックアップ タイプを使用して、日付時刻フィールドの部分テキスト一致、配列要素クエリ、正規式一致、年値一致などの高度なクエリを実行できます。
このセクションでは、クエリフィルターを次の方法で調整する方法について説明します。
テキスト一致検索の使用
次の表では、テキスト値の具体的な一致条件を含むクエリを実行するために使用できるいくつかのルックアップ タイプについて説明します。
ルックアップタイプ | 説明 |
---|---|
| 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)...']>
組み合わせ検索
複数の一致条件のセットを使用するクエリは、次の方法で実行できます。
クエリメソッドに複数のクエリフィルターをカンマで区切って渡します。 の例を表示するには、Dpango ドキュメントの「 オブジェクトの取得 」を参照してください。
クエリ メソッドを連結します。 詳細については、Diango ドキュメントの「 フィルターの連鎖 」を参照してください。
Q
オブジェクトを使用し、各オブジェクトを 論理演算子で区切ります。 詳細については、Dください ドキュメントの「 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>]>
Tip
上記の例ではArrayField
値に対してフィールド検索を使用しています。ArrayField
のクエリの詳細については、このガイドの「 配列値のクエリ 」セクションを参照してください。
クエリ結果の変更
このセクションでは、クエリ結果を次の方法で変更する方法について説明します。
結果を並べ替える
order_by()
メソッドを使用して、クエリ結果の並べ替え順序を指定できます。 特定のフィールドの値に基づいて昇順の並べ替えを指定するには、フィールド名を引数として渡します。 降順のソートを指定するには、マイナス記号(-
)を先頭に付けたフィールド名を引数として渡します。
カンマで区切られた複数のフィールド名を order_by()
メソッドに渡すことができます。 Dlango 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 月)3 番目と 4 番目の結果を返します
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()
メソッドを呼び出して、genres
値が ["Crime", "Comedy"]
である最初のドキュメントを sample_mflix.movies
コレクションでクエリします。
Movie.objects.filter(genres=["Crime", "Comedy"]).first()
<Movie: The Crew>
高度なフィールドクエリ
このセクションでは、次のフィールドでクエリを実行する方法について説明します。
埋め込みモデル値のクエリ
埋め込みモデルのフィールドをクエリする操作をモデルに対して実行できます。 これらのフィールドをクエリするには、次のコードに示すように、クエリするフィールドに到達するまで、モデルフィールドと各埋め込みフィールド名を二重アンダースコア(__
)で区切って指定します。
Model.objects.filter(<model field>__<embedded model field>=<value>)
フィールドルックアップ を使用して埋め込みモデルクエリを改善することもできます。クエリする埋め込みモデルフィールドの後にルックアップ タイプを追加し、二重アンダースコアをプレフィックスとして付けます。
例
この例では、 lookup を使用して、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
値に保存されているデータをクエリできます。 Dlango 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)...']>
埋め込みモデル配列値のクエリ
Tip
このセクションの例では、モデル作成ガイドの 埋め込みモデル配列データの保存 セクションで定義されたモデル クラスを使用します。
埋め込みモデルの配列のフィールドをクエリする操作をモデルに対して実行できます。これらのクエリは、埋め込みモデル値のクエリセクションで説明されているのと同じ構文を使用します。
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
配列の最初の 3 つの要素のうちの 1 つで、last_name
値が "Winslet"
であるドキュメントをクエリします。
Movie.objects.filter(cast__0_2__last_name="Winslet")
多形埋め込みモデル値のクエリ
PolymorphicEmbeddedModelField
値に保存されているデータをクエリするには、前述の埋め込みモデル値のクエリセクションで説明されているのと同じ構文を使用します。埋め込みモデル間で共有されるフィールドまたは特定のモデルに固有のフィールドをクエリできます。
重要
フィールド名の競合を避ける
複数の埋め込みモデル間で共有されているがデータ型が異なるフィールドをクエリすると、不正確な結果が表示される可能性があります。Dlango は、ルックアップ値に割り当てるデータ型を正しく決定できません。この場合、Diango MongoDBバックエンドは埋め込みモデルを反復処理し、最初に見つけたフィールドと対応するデータ型を使用します。
同様に、複数のモデルで同じ名前とデータ型を持つネストされた埋め込みモデルフィールドをクエリすると、Diango MongoDBバックエンドは PolymorphicEmbeddedModelField
定義にリストされている最初のモデルのみをクエリします。
例
Tip
次の例では、モデル作成ガイドの「多形埋め込みモデル データの保存」セクションで定義されたモデル クラスを使用します。
この例では、 lookup を使用して awards
フィールドには Oscar
または GoldenGlobe
タイプの埋め込みモデルが保存できます。このコードは、awards.wins
値が 10
であるドキュメントをクエリします。これは、次のいずれかの埋め込みモデル型で表されるドキュメントと一致します。
Movie.objects.filter(awards__wins=10)
埋め込みモデル間で共有されていないフィールドをクエリすることもできます。次の例では、Oscar
埋め込みモデルに一意の awards.best_picture
フィールドをクエリします。
Movie.objects.filter(awards__best_picture=True)
多形埋め込みモデル配列値のクエリ
PolymorphicEmbeddedModelArrayField
値に保存されているデータをクエリするには、「埋め込みモデル配列値のクエリ」セクションで説明されているものと同じ構文と演算子を使用します。埋め込みモデル間で共有されるフィールドまたは特定のモデルに固有のフィールドをクエリできます。
重要
フィールド名の競合を避ける
複数の埋め込みモデル間で共有されているがデータ型が異なるフィールドをクエリすると、不正確な結果が表示される可能性があります。Dlango は、ルックアップ値に割り当てるデータ型を正しく決定できません。この場合、Dhango MongoDBバックエンドは埋め込みモデルを反復処理し、最初に見つけたフィールドと対応するデータ型を使用します。
同様に、複数のモデルで同じ名前とデータ型を持つネストされた埋め込みモデルフィールドをクエリすると、Diango MongoDBバックエンドは PolymorphicEmbeddedModelArrayField
定義にリストされている最初のモデルのみをクエリします。
例
Tip
次の例では、モデル作成ガイドの「多形埋め込みモデル配列データの保存」セクションで定義されたモデル クラスを使用します。
この例では、 lookup を使用して awards
フィールドには Oscar
または GoldenGlobe
タイプの埋め込みモデルの配列が保存されます。このコードは、awards.year
の値が 2000
より小さいドキュメントをクエリします。この値は、いずれかの埋め込みモデル型で表されるドキュメントと一致します。
Movie.objects.filter(awards__year__lt=2000)
Query JSON Values
JSONField
「埋め込みモデル値のクエリ」セクションに示されているのと同じ構文を使用して、 値に保存されているデータをクエリできます。クエリするフィールドに到達するまで、各フィールドとネストされたフィールド名を二重アンダースコア(__
)で区切って連結します。
次の例では、 JSONField
の値を持つ imdb
フィールドで、ネストされた votes
フィールドの値が 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)...']>
JSONデータの注釈とフィルタリング
KT()
式を使用して、JSONField
値に保存されているデータに注釈を付けてフィルタリングできます。 KT()
式を使用すると、JSONField
内でキー、インデックス、またはパス変換のテキスト値を操作できます。 KT()
式をannotate()
メソッドに渡します。これにより、QuerySet
内の各オブジェクトに、提供された KT()
式が注釈が付けられます。
次の例では、 annotate()
と KT()
を使用して新しい score
キーを作成し、imdb.rating
のネストされたフィールド値を保存します。 次に、コードは 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 の集計パイプライン構文 を使用して未加工のデータベースクエリを実行する方法については、「 Raw データベース クエリの実行 」ガイドを参照してください。
その他のQuerySet
操作を実行する方法については、 「 CRUD操作の実行 」ガイドを参照してください。