この記事ではMongoDBの基本操作と考え方について説明します。
Reference Link
NonSQL?
NonSQL(NoSQL)は、関係型データベース(SQLデータベース)以外のデータベース管理システムの総称です。NoSQLデータベースは、伝統的な関係型データベースとは異なるデータモデルとアーキテクチャを持っています。
Mongo DB?
MongoDBは、非関係型データベース管理システム(NoSQL DBMS)の一種です。MongoDBは、データをドキュメントと呼ばれるJSON形式で格納します。データモデルはスキーマレス(Schemaless)であり、フィールドの追加や変更が簡単になります。
Database
MongoDBのDatabase(データベース)は、MongoDBのデータ管理の最上位レベルであり、関連するコレクション(テーブルに相当)をグループ化します。
各データベースは、名前を持ち、複数のコレクションを含むことができます。データベースは、関係型データベースでいうところのデータベースに相当します。
また、異なるアプリケーションやユースケースのために、それぞれ独立したデータの保持と管理を可能にします。
データベースの作成以下のようにコマンドを実行し、”mydb”という名前のデータベースを作成します。
use mydb |
このコマンドを実行すると、指定した名前のデータベースが作成されます。もしデータベースがすでに存在する場合は、既存のデータベースに切り替えます。
Collections
MongoDBのCollectionsは、MongoDBデータベース内のドキュメント(データレコード)のグループ化です。コレクションは、関連するドキュメントを論理的にまとめるために使用されます。
コレクションは、関係型データベースのテーブルに類似していますが、いくつかの重要な違いがあります。具体的には、MongoDBのコレクションは特定のフィールドや構造を事前に定義する必要はありません。各ドキュメントは異なるフィールドや構造を持つことができます。
例えば、ブログアプリケーションのデータモデルを考えてみましょう。ブログのデータベースには、複数のコレクションが存在する可能性があります。例えば、
- “users”コレクションにはユーザー情報が格納されます
- “posts”コレクションにはブログ投稿が格納されることが考えられます。
各コレクション内のドキュメントは、JSON形式(またはBSON形式)で表されます。それぞれのドキュメントは、コレクション内の1つのデータレコードに相当します。ドキュメントはフィールドと値のペアを持ち、それぞれのフィールドはドキュメント内で一意に識別されます。
MongoDBでは、コレクションは動的に作成されます。すでに存在しないコレクションにデータを挿入すると、MongoDBは自動的にそのコレクションを作成します。
Documents
MongoDBのDocumentsは、MongoDBデータベース内で扱われるデータの単位です。ドキュメントはJSON形式で表現され、MongoDB内に格納されます。
ドキュメントは、関係型データベースでいうところのRecordに相当します。それぞれのドキュメントは、コレクション内の1つのData Recordとして扱われます。MongoDBの特徴の一つは、ドキュメントがスキーマレスであることです。つまり、個々のドキュメントは異なるフィールドや構造を持つことができます。
ドキュメントは、フィールドとその値のペアで構成されます。
- フィールドは名前(キー)と値の組み合わせであます
- 任意の数のフィールドを持つことができます
- フィールドの値は、さまざまなデータ型を持つことができます
- 文字列
- 数値
- 配列
- 埋め込まれたドキュメント
- など…
例えば、以下はユーザーのドキュメントの例です:
このドキュメントには、”name”、”age”、”email”などのフィールドがあります。”address”フィールドには埋め込まれたドキュメントがあり、”interests”フィールドには配列が含まれています。
{ “name”: “John Doe”, “age”: 30, “email”: “john@example.com”, “address”: { “street”: “123 Main St”, “city”: “New York”, “country”: “USA” }, “interests”: [“reading”, “music”, “sports”] } |
MongoDBでは、ドキュメントはフレキシブルであり、必要に応じてフィールドを追加・変更できます。データモデルの変更が柔軟に行えるため、アプリケーションの開発やデータの進化に対応しやすいという利点があります。
Operation
これからMongoDBの簡単な操作について説明します。
mongodb Shell
mongoコマンドでmongodbシェルを起動します。
ubuntu@ubuntu:~$ mongo — > |
use db
use コマンドを使用しDatabaseを作成します。
> use testdb switched to db testdb |
show dbs
show dbsコマンドを使用しDatabaseの中にEmptyであればそのDBが表示しません。
> show dbs admin 0.000GB config 0.000GB dbStation 0.000GB local 0.000GB myDB 0.000GB tanks 0.000GB |
Create Collections
db.createCollection()を使用しCollections(SQLのTableに相当)を作成します。
以下のExampleでMyCollections1というCollectionを作りました。
> db.createCollection(“MyCollections1”) { “ok” : 1 } |
Insert Documents
次はinsertOne()を使って先程定義したCollectionにDocuments(SQLのRecordに相当)を挿入します。
>db.MyCollections1.insertOne({plc:”Beckhoff”,model:”CX6920″,TwinCATVersion:3}) { “acknowledged” : true, “insertedId” : ObjectId(“64a0ad21cf8d3947804e3616”) } |
>db.MyCollections1.insertOne({plc:”Mitusbishi”,model:”IQR”,GXWORKSVersion:3}) { “acknowledged” : true, “insertedId” : ObjectId(“64a0adc0cf8d3947804e3617”) } |
>db.MyCollections1.insertOne({plc:”Keyence”,model:”KV8000″,KVStudioVersion:”11.6.G”}) { “acknowledged” : true, “insertedId” : ObjectId(“64a0ade1cf8d3947804e3618”) } |
Find
今度はfind()でColllectionsのデータを検索します。
> db.MyCollections1.find() { “_id” : ObjectId(“64a0ad21cf8d3947804e3616”), “plc” : “Beckhoff”, “model” : “CX6920”, “TwinCATVersion” : 3 } { “_id” : ObjectId(“64a0adc0cf8d3947804e3617”), “plc” : “Mitusbishi”, “model” : “IQR”, “GXWORKSVersion” : 3 } { “_id” : ObjectId(“64a0ade1cf8d3947804e3618”), “plc” : “Keyence”, “model” : “KV8000”, “KVStudioVersion” : “11.6.G” } |
Find with Conditions
find()にKeyと一緒に渡せば取り出したいRecordを取得できます。
下記のExampleではCollectionsにplc=BeckhoffのRecordを取り出しました。
db.MyCollections1.find({plc:”Beckhoff”}) { “_id” : ObjectId(“64a0ad21cf8d3947804e3616”), “plc” : “Beckhoff”, “model” : “CX6920”, “TwinCATVersion” : 3 } |
Update
CollectionsのRecordに新しいデータを挿入したい場合はUpdate()を使います。
下記のExapleではproject:MyprojectのPairを追加しました。
db.MyCollections1.updateOne({plc:”Beckhoff”},{$set:{projectname:”Myproject”}}) { “acknowledged” : true, “matchedCount” : 1, “modifiedCount” : 1 } |
Find Again
もう一回データを確認しましょう。
> db.MyCollections1.find({plc:”Beckhoff”}) { “_id” : ObjectId(“64a0ad21cf8d3947804e3616”), “plc” : “Beckhoff”, “model” : “CX6920”, “TwinCATVersion” : 3, “projectname” : “Myproject” } > db.MyCollections1.deleteOne({plc:”Keyence”}) { “acknowledged” : true, “deletedCount” : 1 } > db.MyCollections1.find() { “_id” : ObjectId(“64a0ad21cf8d3947804e3616”), “plc” : “Beckhoff”, “model” : “CX6920”, “TwinCATVersion” : 3, “projectname” : “Myproject” } { “_id” : ObjectId(“64a0adc0cf8d3947804e3617”), “plc” : “Mitusbishi”, “model” : “IQR”, “GXWORKSVersion” : 3 } |
Exit
Ctrl+Cでmongodb ShellをExitします。
> ^C bye |