MochiuWiki : SUSE, EC, PCB
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
検索
個人用ツール
ログイン
Toggle dark mode
名前空間
ページ
議論
表示
閲覧
ソースを閲覧
履歴を表示
MongoDB - コレクションのソースを表示
提供: MochiuWiki : SUSE, EC, PCB
←
MongoDB - コレクション
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループのいずれかに属する利用者のみが実行できます:
管理者
、new-group。
このページのソースの閲覧やコピーができます。
== 概要 == MongoDBにおけるコレクション (Collection) は、ドキュメントの集合である。<br> リレーショナルデータベース管理システム (RDBMS) のテーブルに相当する。<br> <br> MongoDBはスキーマレスのため、同じコレクション内のドキュメントが異なる構造を持つことができる。<br> ただし、スキーマ検証機能を使用することにより、ドキュメントの構造を制約することも可能である。<br> <br><br> == RDBMSとの用語対応 == 下表に、MongoDBとMySQLの用語対応を示す。<br> <br> <center> {| class="wikitable" |+ MongoDBとMySQLの用語対応 ! MongoDB !! MySQL !! 説明 |- | コレクション || テーブル || ドキュメント / レコードの集合 |- | ドキュメント || レコード / 行 || データの単位 |- | フィールド || カラム || データの属性 |- | _id (自動生成) || 主キー || ドキュメントの一意識別子 |} </center> <br><br> == コレクションの作成 == ==== 基本的な作成方法 ==== コレクションを作成するには、<code>db.createCollection</code> メソッドを使用する。<br> <br> 基本的な構文を以下に示す。<br> <syntaxhighlight lang="javascript"> db.createCollection(name, { capped: <boolean>, size: <number>, max: <number>, validator: <document>, validationLevel: <string>, validationAction: <string>, collation: <document> }) </syntaxhighlight> <br> 簡単な作成例を以下に示す。<br> <syntaxhighlight lang="javascript"> db.createCollection("users") </syntaxhighlight> <br> MongoDBでは、ドキュメントを挿入する時に、コレクションが存在しない場合は自動的に作成される。<br> <syntaxhighlight lang="javascript"> db.users.insertOne({ name: "Alice", age: 30 }) </syntaxhighlight> <br> ==== 既存コレクションの存在確認 ==== コレクションが既に存在するかどうかを確認してから作成する場合は、以下の方法を使用する。<br> <syntaxhighlight lang="javascript"> if (!db.getCollectionNames().includes("users")) { db.createCollection("users") } </syntaxhighlight> <br> ==== コレクションのコピー ==== 既存のコレクションをコピーする方法を以下に示す。<br> <br> * aggregateメソッドと$outステージを使用する方法 *: <syntaxhighlight lang="javascript"> db.source_collection.aggregate([ { $match: {} }, { $out: "destination_collection" } ]) </syntaxhighlight> <br> * mongodumpとmongorestoreを使用する方法 *: <syntaxhighlight lang="bash"> mongodump --db mydb --collection source_collection mongorestore --db mydb --collection destination_collection dump/mydb/source_collection.bson </syntaxhighlight> <br> ==== Capped Collection (固定サイズコレクション) ==== Capped Collectionは、固定サイズのコレクションであり、サイズまたはドキュメント数の上限に達すると、古いドキュメントが自動的に削除される。<br> ログやキャッシュ等の用途に適している。<br> <br> Capped Collectionの作成例を以下に示す。<br> <syntaxhighlight lang="javascript"> db.createCollection("logs", { capped: true, size: 5242880, max: 5000 }) </syntaxhighlight> <br> <center> {| class="wikitable" |+ Capped Collectionのパラメータ ! パラメータ !! 説明 |- | <code>capped</code> || <code>true</code> に設定すると、Capped Collectionとして作成される。 |- | <code>size</code> || コレクションの最大サイズ (バイト単位)。 |- | <code>max</code> || コレクションに保存できる最大ドキュメント数 (オプション) |} </center> <br> ==== Time Series Collection (時系列コレクション) ==== Time Series Collectionは、時系列データ (センサーデータ、ログデータ等) を効率的に格納するためのコレクションである。<br> MongoDB 5.0以降で利用可能である。<br> <br> Time Series Collectionの作成例を以下に示す。<br> <syntaxhighlight lang="javascript"> db.createCollection("sensor_data", { timeseries: { timeField: "timestamp", metaField: "metadata", granularity: "hours" }, expireAfterSeconds: 86400 }) </syntaxhighlight> <br> <center> {| class="wikitable" |+ Time Series Collectionのパラメータ ! パラメータ !! 説明 |- | <code>timeField</code> || タイムスタンプを格納するフィールド名。 |- | <code>metaField</code> || メタデータを格納するフィールド名 (オプション) |- | <code>granularity</code> || データの粒度<br><code>seconds</code>、<code>minutes</code>、<code>hours</code> のいずれか |- | <code>expireAfterSeconds</code> || データの有効期限 (秒単位) |} </center> <br><br> == 照合順序 (Collation) == ==== 照合順序とは ==== 照合順序 (Collation) は、文字列の比較やソート時に使用される規則である。<br> 言語固有の文字列比較ルール (大文字小文字の区別、アクセント記号の扱い等) を定義する。<br> <br> 下表に、照合順序の主なオプションを示す。<br> <br> <center> {| class="wikitable" |+ 照合順序のオプション ! オプション !! 説明 |- | <code>locale</code> || 必須項目である。<br>言語コード (例: <u>ja</u>、<u>en</u>、<u>fr</u>) |- | <code>strength</code> || 比較の厳密さ (1〜5)<br>1は基本文字のみを比較し、5は全ての違いを考慮する。 |- | <code>caseLevel</code> || 大文字小文字を区別するかどうか<br><code>true</code> または <code>false</code> |- | <code>numericOrdering</code> || 数値文字列を数値として比較するかどうか<br><code>true</code> または <code>false</code> |} </center> <br> ==== 照合順序の指定 ==== コレクション作成時に照合順序を指定する例を以下に示す。<br> <syntaxhighlight lang="javascript"> db.createCollection("products", { collation: { locale: "ja", strength: 1, caseLevel: false, numericOrdering: true } }) </syntaxhighlight> <br> ==== 使用可能な照合順序の確認 ==== MongoDBでサポートされているロケールは、ICU (International Components for Unicode) ライブラリに基づいている。<br> 一般的な言語コードには、<u>ja</u> (日本語)、<u>en</u> (英語)、<u>fr</u> (フランス語) 等がある。<br> <br> ==== 既存コレクションの照合順序の確認 ==== コレクションの照合順序を確認するには、以下のコマンドを使用する。<br> <syntaxhighlight lang="javascript"> db.getCollectionInfos({ name: "products" }) </syntaxhighlight> <br> ==== 既存コレクションの照合順序の変更 ==== 既存のコレクションの照合順序を変更するには、<code>collMod</code>コマンドを使用する。<br> <syntaxhighlight lang="javascript"> db.runCommand({ collMod: "products", collation: { locale: "en", strength: 2 } }) </syntaxhighlight> <br><br> == コレクションの削除 == ==== 単一コレクションの削除 ==== コレクションを削除するには、<code>drop</code> メソッドを使用する。<br> <syntaxhighlight lang="javascript"> db.users.drop() </syntaxhighlight> <br> 削除が成功した場合は <code>true</code> が返され、失敗した場合は <code>false</code> が返される。<br> <br> ==== 複数コレクションの削除 ==== 複数のコレクションを削除する場合、以下に示すようにループを使用する。<br> <syntaxhighlight lang="javascript"> var collections = ["collection1", "collection2", "collection3"]; collections.forEach(function(coll) { db[coll].drop(); }); </syntaxhighlight> <br> または、正規表現を使用して特定のパターンに一致するコレクションを削除する。<br> <syntaxhighlight lang="javascript"> db.getCollectionNames().forEach(function(coll) { if (coll.startsWith("temp_")) { db[coll].drop(); } }); </syntaxhighlight> <br><br> == ドキュメントの削除 == ==== deleteOneメソッド と deleteManyメソッド ==== コレクション内の特定のドキュメントを削除するには、<code>deleteOne</code> メソッド または <code>deleteMany</code> メソッドを使用する。<br> <br> * 単一のドキュメントを削除する例 *: <syntaxhighlight lang="javascript"> db.users.deleteOne({ name: "Alice" }) </syntaxhighlight> <br> * 複数のドキュメントを削除する例 *: <syntaxhighlight lang="javascript"> db.users.deleteMany({ age: { $lt: 18 } }) </syntaxhighlight> <br> * 全てのドキュメントを削除する例 *: <syntaxhighlight lang="javascript"> db.users.deleteMany({}) </syntaxhighlight> <br> ==== dropメソッド と deleteManyメソッド のパフォーマンス比較 ==== コレクション全体を削除する場合、<code>drop</code> メソッド と <code>deleteMany</code> メソッド には以下の違いがある。<br> <br> <center> {| class="wikitable" |+ dropメソッド と deleteManyメソッド の比較 ! メソッド !! パフォーマンス !! インデックス !! 用途 |- | drop || 高速 || 削除される || コレクション全体を削除する場合 |- | deleteMany || 低速 || 保持される || ドキュメントのみを削除する場合 |} </center> <br> <code>drop</code> メソッドは、コレクションとインデックスを1度に削除するため、大量のドキュメントを削除する場合は高速である。<br> <code>deleteMany</code> メソッドは、各ドキュメントを個別に削除するため、大量のドキュメントを削除する場合は低速である。<br> <br><br> == コレクションの確認 == ==== show collectionsコマンド ==== データベース内の全てのコレクションを表示する。<br> <syntaxhighlight lang="javascript"> show collections </syntaxhighlight> <br> ==== db.getCollectionNamesメソッド ==== プログラム内でコレクション名を取得する。<br> <syntaxhighlight lang="javascript"> db.getCollectionNames() </syntaxhighlight> <br> このメソッドは、コレクション名の配列を返す。<br> <br> ==== db.collection.statsメソッド ==== コレクションの詳細な統計情報を取得する。<br> <syntaxhighlight lang="javascript"> db.users.stats() </syntaxhighlight> <br> 出力される情報には、以下に示すものが含まれる。<br> * ドキュメント数 * コレクションのサイズ * インデックス数 * インデックスのサイズ * ストレージエンジンの情報 <br><br> == スキーマ検証 (制約の代替) == ==== スキーマ検証とは ==== MongoDBはスキーマレスのデータベースであるが、<code>$jsonSchema</code> を使用することで、ドキュメントの構造を検証できる。<br> これは、RDBMSの制約 (NOT NULL、型指定等) に相当する機能である。<br> <br> ==== $jsonSchemaによる検証 ==== スキーマ検証を設定したコレクションの作成例を以下に示す。<br> <syntaxhighlight lang="javascript"> db.createCollection("users", { validator: { $jsonSchema: { bsonType: "object", required: ["name", "email", "age"], properties: { name: { bsonType: "string", description: "must be a string and is required" }, email: { bsonType: "string", pattern: "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$", description: "must be a valid email address" }, age: { bsonType: "int", minimum: 0, maximum: 120, description: "must be an integer between 0 and 120" }, status: { enum: ["active", "inactive", "pending"], description: "can only be one of the enum values" } } } } }) </syntaxhighlight> <br> 下表に、主な検証オプションを示す。<br> <center> {| class="wikitable" |+ $jsonSchemaの検証オプション ! オプション !! 説明 |- | <code>bsonType</code> || フィールドのデータ型を指定する<br><code>string</code>、<code>int</code>、<code>double</code>、<code>object</code>、<code>array</code> 等 |- | <code>required</code> || 必須フィールドを指定する配列 |- | <code>pattern</code> || 文字列フィールドに対する正規表現パターン |- | <code>minimum</code> / <code>maximum</code> || 数値フィールドの最小値 / 最大値 |- | <code>enum</code> || 許可される値のリスト |} </center> <br> ==== バリデーションレベルとアクション ==== スキーマ検証の動作を制御するために、下表のオプションを使用できる。<br> <br> <center> {| class="wikitable" |+ スキーマ検証の動作オプション ! オプション !! 値 !! 説明 |- | rowspan="2" | <code>validationLevel</code> || <code>strict</code> (デフォルト) || 全ての挿入と更新に対して検証を適用する。 |- | <code>moderate</code> || 既に有効なドキュメントの更新のみを検証する。 |- | rowspan="2" | <code>validationAction</code> || <code>error</code> (デフォルト) || 検証に失敗した操作を拒否する。 |- | <code>warn</code> || 検証に失敗した操作を許可するが、警告をログに記録する。 |} </center> <br> 設定例を以下に示す。<br> <syntaxhighlight lang="javascript"> db.createCollection("products", { validator: { $jsonSchema: { bsonType: "object", required: ["name", "price"] } }, validationLevel: "moderate", validationAction: "warn" }) </syntaxhighlight> <br> ==== 既存コレクションへの検証の追加 ==== 既存のコレクションにスキーマ検証を追加するには、<code>collMod</code> コマンドを使用する。<br> <syntaxhighlight lang="javascript"> db.runCommand({ collMod: "users", validator: { $jsonSchema: { bsonType: "object", required: ["name", "email"] } }, validationLevel: "strict", validationAction: "error" }) </syntaxhighlight> <br><br> == インデックス == ==== インデックスとは ==== インデックスは、クエリのパフォーマンスを向上させるためのデータ構造である。<br> 適切なインデックスを設定することで、検索速度が大幅に向上する。<br> <br> ==== 単一フィールドインデックス ==== 以下の例では、単一のフィールドに対してインデックスを作成している。<br> <syntaxhighlight lang="javascript"> db.users.createIndex({ name: 1 }) </syntaxhighlight> <br> <code>1</code> は昇順、<code>-1</code> は降順を示す。<br> <br> ==== ユニークインデックス ==== これは、RDBMSのUNIQUE制約に相当する。<br> <br> 以下の例では、フィールドの値が一意であることを保証するインデックスを作成している。<br> <syntaxhighlight lang="javascript"> db.users.createIndex({ email: 1 }, { unique: true }) </syntaxhighlight> <br> ==== 複合インデックス ==== 複合インデックスは、指定された順序でフィールドをソートする。<br> <br> 以下の例では、複数のフィールドに対してインデックスを作成している。<br> <syntaxhighlight lang="javascript"> db.users.createIndex({ name: 1, age: -1 }) </syntaxhighlight> <br> ==== インデックスの確認 ==== コレクションのインデックスを確認する。<br> <syntaxhighlight lang="javascript"> db.users.getIndexes() </syntaxhighlight> <br> ==== インデックスの削除 ==== 特定のインデックスを削除する。<br> <syntaxhighlight lang="javascript"> db.users.dropIndex("name_1") </syntaxhighlight> <br> 全てのインデックスを削除する。<br> <syntaxhighlight lang="javascript"> db.users.dropIndexes() </syntaxhighlight> <br> <u>※注意</u><br> <u><code>_id</code> フィールドのインデックスは削除できない。</u><br> <br><br> == インポート == ==== mongoimportコマンドの基本 ==== 外部ファイルからデータをインポートするには、<code>mongoimport</code> コマンドを使用する。<br> このコマンドは、JSON、CSV、TSV形式のファイルをサポートしている。<br> <br> ==== JSONファイルのインポート ==== 以下の例では、JSON形式のファイルをインポートしている。<br> <syntaxhighlight lang="bash"> mongoimport --db mydb --collection users --file users.json --jsonArray </syntaxhighlight> <br> <center> {| class="wikitable" |+ mongoimportのオプション (JSON) ! オプション !! 説明 |- | <code>--db</code> || インポート先のデータベース名。 |- | <code>--collection</code> || インポート先のコレクション名。 |- | <code>--file</code> || インポートするファイルのパス。 |- | <code>--jsonArray</code> || ファイルがJSON配列形式の場合に指定する。 |} </center> <br> JSON Lines形式 (1行に1つのJSONオブジェクト) の場合は、<code>--jsonArray</code> オプションを省略する。<br> mongoimport --db mydb --collection users --file users.jsonl <br> ==== CSVファイルのインポート ==== CSV形式のファイルをインポートする例を以下に示す。<br> mongoimport --db mydb --collection users --type=csv --headerline --file users.csv <br> <center> {| class="wikitable" |+ mongoimportのオプション (CSV) ! オプション !! 説明 |- | <code>--type=csv</code> || ファイル形式をCSVとして指定する。 |- | <code>--headerline</code> || 最初の行をフィールド名として使用する。 |} </center> <br> ヘッダ行がない場合は、<code>--fields</code> オプションでフィールド名を指定する。<br> mongoimport --db mydb --collection users --type=csv --fields=name,email,age --file users.csv <br> ==== 認証が必要な場合 ==== MongoDBに認証が設定されている場合、以下に示すオプションを追加する。<br> mongoimport --db mydb --collection users --file users.json --username admin --password admin --authenticationDatabase admin <br> ==== リモートホストへのインポート ==== リモートのMongoDBサーバにインポートする場合、以下に示すオプションを使用する。<br> mongoimport --host 192.168.1.100 --port 27017 --db mydb --collection users --file users.json <br> ==== 既存データの扱い ==== 既存のドキュメント と <code>_id</code> フィールドが重複する場合の動作を制御するには、以下に示すオプションを使用する。<br> <br> * 既存のドキュメントを更新する *: <pre>mongoimport --db mydb --collection users --file users.json --mode=upsert</pre> *: <br> * 既存のドキュメントをスキップする *: <pre>mongoimport --db mydb --collection users --file users.json --mode=merge</pre> <br><br> == 関連情報 == * [https://www.mongodb.com/docs/manual/core/databases-and-collections/ MongoDB公式ドキュメント - データベースとコレクション] * [https://www.mongodb.com/docs/manual/core/schema-validation/ MongoDB公式ドキュメント - スキーマ検証] * [https://www.mongodb.com/docs/manual/indexes/ MongoDB公式ドキュメント - インデックス] * [https://www.mongodb.com/docs/database-tools/mongoimport/ MongoDB公式ドキュメント - mongoimport] <br><br> {{#seo: |title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki |keywords=MochiuWiki,Mochiu,Wiki,MongoDB,Collection,NoSQL,Database,コレクション,ドキュメント,スキーマ検証,インデックス,mongoimport,Capped Collection,Time Series Collection,Collation,照合順序 |description={{PAGENAME}} - 電子回路とSUSE Linuxに関する情報 | This page is {{PAGENAME}} in our wiki about electronic circuits and SUSE Linux |image=/resources/assets/MochiuLogo_Single_Blue.png }} __FORCETOC__ [[カテゴリ:その他データベース]]
MongoDB - コレクション
に戻る。
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
Collapse