データベースとコレクション
項目一覧
Overview
このガイドでは、Rust ドライバーを使用して MongoDB のデータベースとコレクションにアクセスおよびコレクションを管理する方法を学習できます。
MongoDB では、データは階層構造で整理されています。 MongoDB 配置には 1 つ以上のデータベースが含まれ、各データベースには 1 つ以上のコレクションが含まれます。 各コレクションでは、MongoDB は、フィールドと値のペアを含むドキュメントとしてデータを保存します。
ドキュメント データ形式の詳細については、サーバー マニュアルのドキュメントを参照してください。
データベースへのアクセス
クライアントから データベース インスタンスを取得することで、データベースにアクセスできます。 Database
インスタンスを使用して、データベースレベルの操作を実行し、データベースに含まれるコレクションにアクセスできます。
クライアント で次のいずれかのメソッドを呼び出す インスタンスを使用してDatabase
を作成します。
database() : 名前でデータベースを検索
database_with_options() : オプションを設定する( DatabaseOptions )を、名前でデータベースを検索する際
default_database() : インスタンスに指定されたデフォルトのデータベースにアクセスします
Client
Tip
クライアントのデフォルトのデータベースを指定するには、 ClientOptions
構造体のdefault_database
フィールドを設定します。 このフィールドを設定しない場合、ドライバーは 接続stringの defaultauthdb
コンポーネントからデフォルトのデータベースを取得します。
存在しないデータベースの名前をdatabase()
メソッドまたはdatabase_with_options()
メソッドに渡すと、ドライバーは引き続きDatabase
インスタンスを返します。 このデータベースのコレクションにデータを挿入すると、サーバーによってデータが作成されます。
次の例では、 database()
メソッドを使用してtest_db
というデータベースにアクセスします。
let db = client.database("test_db");
データベースを一覧表示する
配置のデータベースの一覧を表示するには、 list_database_names() メソッドClient
を インスタンスのメソッドを使用します。このメソッドは、データベース名を string として含むベクトル、 Vec<String>
型を返します。
各データベースの詳細情報を表示するには、 list_databases() を呼び出しますClient
インスタンスのメソッドを使用します。このメソッドはVec<DatabaseSpecification>
型を返します。 データベース の仕様 タイプには、サイズやデータが含まれているかどうかなど、各データベースを説明するフィールドが含まれます。
次の例は、 list_database_names()
メソッドを使用してデータベースのリストを出力する方法を示しています。
let db_list = client.list_database_names().await?; println!("{:?}", db_list);
["admin", "local", "test_db", ...]
データベースの削除
データベースを削除すると、そのデータベースのコレクション内のすべてのデータが永続的に削除されます。 データベースを削除するには、 drop() を呼び出しますDatabase
インスタンスのメソッドを使用します。次のコードは、 db
変数が参照するデータベースを削除する方法を示しています。
db.drop().await?;
警告
データベースの削除によるデータの削除
データベースを永続的に削除すると、データベースのコレクション内のすべてのドキュメントと、それらのコレクションのすべてのインデックスが永続的に削除されます。 データベースを削除した後は、そのデータにアクセスしたり、復元したりすることはできません。
コレクションにアクセスする
コレクションを取得することで、 コレクション にアクセスできます データベースからのインスタンス。Collection
インスタンスを使用して、データ操作を実行し、集計を作成し、インデックスを管理できます。 Collection
を取得するには、 Database
インスタンスで次のいずれかのメソッドを呼び出します。
collection() : 名前でコレクションを検索
collection_with_options() : オプションを設定する( CollectionOptions )がコレクションに名前を使用してアクセスしている場合、
存在しないコレクションの名前をcollection()
またはcollection_with_options()
メソッドに渡すと、ドライバーは引き続きCollection
インスタンスを返します。 このコレクションにデータを挿入すると、サーバーによってコレクションが作成されます。 コレクションを明示的に作成する方法については、このガイドの「 コレクションの作成 」セクションを参照してください。
この例では、 collection_with_options()
メソッドを使用して次のアクションを実行しています。
db
変数が参照するデータベースからcoll_xyz
というコレクションにアクセスするCollectionOptions
タイプのコレクションに書込み設定(write preference)を設定する
let wc = WriteConcern::builder().journal(true).build(); let coll_opts = CollectionOptions::builder().write_concern(wc).build(); let my_coll: Collection<Document> = db.collection_with_options("coll_xyz", coll_opts);
書込み保証 (write concern) の詳細については、サーバー マニュアルの「書込み保証(write concern) 」を参照してください。
コレクション パラメータ化
コレクションのデータをシリアル化するデータ型を指定して、 Collection
インスタンスをパラメータ化する必要があります。 特定のタイプでパラメータ化されているCollection
インスタンスでメソッドを呼び出すと、メソッドはこのタイプのインスタンスを受け入れるか返します。
注意
Collection
インスタンスをパラメータ化しない場合、同じスコープ内で指定されたデータ型で CRUD 操作を実行すると、コンパイラーはジェネリック型を推測します。
次の例では、コレクションをDocument
型でパラメータ化する同等の方法を示しています。
let my_coll: Collection<Document> = client.database("test_db").collection("coll_xyz"); let my_coll = client.database("test_db").collection::<Document>("coll_xyz");
Tip
Document
型ではなく、データをモデル化するカスタムタイプでCollection
インスタンスをパラメータ化することをおすすめします。 特定のデータをモデル化する型を定義することで、繰り返しの直列化と検証を回避できます。
Rust ドライバーでの直列化の詳細については、「 データ モデリングと直列化に関するガイドを参照してください。
コレクションを作成する
create_collection() Database
メソッドを呼び出すと、明示的にコレクションを作成できます。 インスタンスのメソッドです。このメソッドは、コレクション名をパラメーターとして受け取ります。 Collection
インスタンスを使用して、データ操作を実行し、集計を作成し、インデックスを管理できます。
次のコードは、 db
変数が参照するデータベース内にcoll_abc
というコレクションを作成する方法を示しています。
db.create_collection("coll_abc").await?;
コレクションを作成する際に、スキーマ検証を実装して一貫したドキュメント スキーマを維持し、書込み (write) 操作が検証ルールをバイパスするかどうかを制御できます。 この機能を有効にする方法については、「スキーマ検証 」のガイドを参照してください。
listCollections
データベース内のコレクションの名前を表示するには、 list_collection_names() メソッドDatabase
を インスタンスのメソッドを使用します。このメソッドは、コレクション名を string として含むベクトル、 Vec<String>
型を返します。
各コレクションの詳細情報を表示するには、 list_collections() メソッドDatabase
を インスタンスのメソッドを使用します。このメソッドはVec<CollectionSpecification>
型を返します。 コレクション の仕様 型には、型や設定などの各コレクションを説明するフィールドが含まれています。
次の例は、 list_collection_names()
メソッドを使用して、 db
変数が参照するデータベース内のコレクションの名前を出力する方法を示しています。
let coll_list = db.list_collection_names().await?; println!("{:?}", coll_list);
["my_coll", "coll_xyz", ...]
コレクションの削除
コレクションを削除すると、そのコレクション内のすべてのデータが永続的に削除されます。 コレクションを削除するには、 drop() を呼び出しますCollection
インスタンスのメソッドを使用します。次のコードは、 my_coll
変数が参照するコレクションを削除する方法を示しています。
my_coll.drop().await?;
警告
コレクションを削除するとデータが削除されます
データベースからコレクションを削除すると、そのコレクション内のすべてのドキュメントとそのコレクションのすべてのインデックスが永続的に削除されます。 コレクションを削除した後は、そのデータにアクセスしたり、復元したりすることはできません。
詳細情報
このガイドの概念の詳細については、次のドキュメントを参照してください。
ドキュメントの挿入ガイド
「データベースとコレクション」のサーバー マニュアル
サーバー マニュアルのドキュメント