FireDAC.Phys.MongoDBWrapper.TMongoCollection
Delphi
TMongoCollection = class(TMongoObject)
C++
class PASCALIMPLEMENTATION TMongoCollection : public TMongoObject
目次
プロパティ
種類 | 可視性 | ソース | ユニット | 親 |
---|---|---|---|---|
class | public | FireDAC.Phys.MongoDBWrapper.pas FireDAC.Phys.MongoDBWrapper.hpp |
FireDAC.Phys.MongoDBWrapper | FireDAC.Phys.MongoDBWrapper |
説明
MongoDB コレクションを表します。
TMongoCollection は、MongoDB の mongoc_collection_t 構造体をカプセル化したものです。
TMongoCollection のインスタンスを直接作成することはできません。代わりに、TMongoConnection および TMongoDatabase の次のメンバのいずれかを使用する必要があります。
- TMongoConnection.GetCollection(
TMongoCollection
の新規インスタンスを取得する場合) - TMongoConnection.Collections(
TMongoCollection
の共有インスタンスを取得する場合) - TMongoDatabase.GetCollection(
TMongoCollection
の新規インスタンスを取得する場合) - TMongoDatabase.Collections(
TMongoCollection
の共有インスタンスを取得する場合)
TMongoCollection には、コレクションに関する基礎データにアクセスするための次の読み取り専用プロパティが用意されています。
次のメンバを使用すると、コレクションのデータをクエリすることができます。
- Find(指定されたクエリに一致するドキュメントをコレクションから検索します)
- Count(コレクション内のドキュメントのうち、指定されたクエリに一致するものの数を取得します)
- Dereference(指定されたオブジェクト ID に一致するドキュメントをコレクションから取得します)
- ListIndexes(コレクション内のインデックスのリストを取得します)
- Aggregate(集約パイプラインを使ってドキュメントを集約します)
- Statistics(コレクションに関する統計情報を取得します)
コレクションのデータを編集するには、次のメンバを使用します。
- Insert(新規ドキュメントを挿入します)。
Insert
を呼び出したあと、コレクションの LastID プロパティから、挿入したドキュメントのオブジェクト ID を読み取ることができます。 - Remove(既存のドキュメントを削除します)。RemoveAll を使用して、コレクションからすべてのドキュメントを削除することもできます。また、Drop を使用して、データベースからコレクションそのものを削除することもできます。
- Update(既存のドキュメントを修正します)。
- CreateIndex(コレクションにインデックスを作成します)または DropIndex(コレクションからインデックスを削除します)。
- Rename(コレクションの名前とデータベースを変更します)。
Insert
、Remove
、Update
のいずれかが呼び出されるたびに、TMongoCollection では変更内容をデータベースに送信します。いくつかの変更を実行し、それらの内容を全部一度にデータベースに送信するには、次の手順に従います。
- BeginBulk を呼び出して、バルク操作を開始します。
Insert
、Remove
、Update
のいずれかを必要な回数だけ呼び出して、変更をローカルに実行します。- EndBulk を呼び出して、バルク操作を送信します。
BeginBulk で開始したバルク操作を中止する場合は、CancelBulk を呼び出すことができます。IsBulk の値を読み取って、バルク操作の途中かどうかを判定することができます(途中の場合は True
、そうでない場合は False
)。
TMongoCollection には、ドキュメントの数を示すさまざまなプロパティが用意されています。つまり、挿入されたドキュメントの数(DocsInserted)、一致したドキュメントの数(DocsMatched)、修正されたドキュメントの数(DocsModified)、削除されたドキュメントの数(DocsRemoved)、更新操作の一環として挿入されたドキュメントの数(DocsUpserted)です。TMongoCollection では、データベースにデータを送信し終わるたびに、これらのプロパティの値を更新します。
コレクションに対してデータベース コマンドを実行するには、次のいずれかのメソッドを使用します。
- Command(指定されたコマンドを実行し、すべての結果ドキュメントにアクセスするためのカーソルを返します)
- CommandSimple(指定されたコマンドを実行し、サーバーからの応答が格納されたドキュメントを返します)
- LastError(getLastError コマンドの結果を返します)
- Validate(検証コマンドを実行します)
レプリカ セットの読み書きのセマンティクスを構成するには、次のプロパティを使用します。
- ReadPreference(コレクションの読み取り設定)
- WriteConcern(コレクションの書き込み確認)
一部のメソッドでは 2 種類のコーディング スタイルをサポート
TMongoCollection の一部のメソッドでは、通常のコーディング スタイルとフルーエント(流れるような)コーディング スタイルの 2 種類のコーディング スタイルをサポートしています。そのようなメソッドとしては、Aggregate、Count、Find、Insert、Remove、Update があります。
通常のコーディング スタイルの使用
通常のコーディング スタイルを使用する場合は、TMongoPipeline インスタンスや TMongoQuery インスタンスなどのビルダ オブジェクトを再利用できます。
既に作成し構成してあるビルダ オブジェクトをターゲット メソッドに渡す必要があります。そのメソッドが、指定されたビルダ オブジェクトに基づいて、MongoDB サーバーに要求を送信します。
次の例では、通常のコーディング スタイルを使ってクエリを送信する方法を示しています。
Delphi の場合:
MyQuery := TMongoQuery.Create(MyConnection.Env);
try
MyQuery.Match
.Add('cuisine', 'Italian')
.Add('address.zipcode', '10075');
MyQuery.Sort
.Ascending(['name']);
MyQuery.Limit(3);
MyCursor := MyCollection.Find(MyQuery);
// …
finally
MyQuery.Free;
C++ の場合:
TMongoQuery* MyQuery = new TMongoQuery(MyConnection->Env);
try {
MyQuery->Match()
->Add("cuisine", String("Italian"))
->Add("address.zipcode", String("10075"));
MyQuery->Sort()
->Ascending(OPENARRAY((String("name"))));
MyQuery->Limit(3);
_di_IMongoCursor MyCursor = MyCollection->Find(MyQuery);
// …
} __finally {
delete MyQuery;
}
フルーエント コーディング スタイルの使用
フルーエント コーディング スタイルを使用する場合は、コードの可読性を高めることができます。
ターゲット メソッドはビルダ オブジェクトを返します。メソッド連鎖を使って、返されたビルダ オブジェクトにデータを格納し MongoDB サーバーに要求を送信することができます。
要求の送信に使用するメソッドは、ビルダ オブジェクトの取得に使用するメソッドによって決まります(下表を参照)。
TMongoCollection のメソッド | ビルダ オブジェクトのメソッド |
---|---|
Aggregate | TMongoPipeline.Open |
Count | TMongoQuery.Value |
Find | TMongoQuery.Open |
Insert | TMongoInsert.Exec |
Remove | TMongoSelector.Exec |
Update | TMongoUpdate.Exec |
- メモ: Delphi では、TMongoPipeline.Open や TMongoQuery.Open の呼び出しを省略して、代わりに、お使いのビルダ オブジェクトを IMongoCursor にキャストすることができます。以下の例を参照してください。
次の例では、フルーエント コーディング スタイルを使ってクエリを送信する方法を示しています。
Delphi の場合:
MyCursor := MyCollection.Find
.Match
.Add('cuisine', 'Italian')
.Add('address.zipcode', '10075')
.&End
.Sort
.Ascending(['name'])
.&End
.Limit(3);
C++ の場合:
_di_IMongoCursor MyCursor = MyCollection->Find()
->Match()
->Add("cuisine", String("Italian"))
->Add("address.zipcode", String("10075"))
->End()
->Sort()
->Ascending(OPENARRAY((String("name"))))
->End()
->Limit(3)
->Open();