AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。

SQL から MongoDB へのマッピング チャート

以下の表に加えて、MongoDB に関してよく尋ねられる質問をまとめた「よくある質問」セクションも参照してください。

次の表は、さまざまな SQL の用語と概念と、それに対応する MongoDB の用語と概念を示しています。

SQL の用語と概念
MongoDB の用語と概念

database

テーブル

行

ドキュメントまたは BSON ドキュメント

コラム

index

テーブル結合

$lookup、埋め込みドキュメント

プライマリキー

任意の一意の列または列の組み合わせをプライマリキーとして指定します。

プライマリキー

MongoDBでは、プライマリキーは自動的に _id フィールドに設定されます。

集計(例: group by)

集計パイプライン

「 SQLから集計へのマッピング チャート 」を参照してください。

SELECT INTO NEW_TABLE

$out

「SQLから集計へのマッピング チャート」を参照してください。

MERGE INTO TABLE

UNION ALL

トランザクション

トランザクション

多くのシナリオでは、マルチドキュメントトランザクションではなく、非正規化されたデータモデル(埋め込みドキュメントと配列)が、引き続きデータやユースケースに最適です。つまり、多くのシナリオでは、データを適切にモデル化することで、マルチドキュメントトランザクションの必要性を最小限に抑えることができます。

次の表は、一部のデータベース実行ファイルと、それに対応する MongoDB 実行ファイルを示しています。この表は、すべてを網羅するものではありません。

MongoDB
MySQL
Oracle
Informix
DB2

Database Server

mysqld

oracle

IDS

DB2 Server

データベース クライアント

mysql

sqlplus

DB-Access

DB2 Client

次の表は、さまざまな SQL ステートメントと、それに対応する MongoDB ステートメントを示しています。この表の例は、次の条件を前提としています。

  • SQL の例では、people という名前のテーブルを前提としています。

  • MongoDB の例では、次のプロトタイプのドキュメントを含む people という名前のコレクションを前提としています。

    { _id: ObjectId("509a8fb2f3f4948bd2f983a0"), user_id: "abc123", age: 55, status: 'A'}

次の表は、テーブル レベルのアクションに関するさまざまな SQL のステートメントと、それに対応する MongoDB のステートメントを示しています。

SQL スキーマ ステートメント
MongoDB スキーマ ステートメント
CREATE TABLE people ( id MEDIUMINT NOT NULL AUTO_INCREMENT, user_id Varchar(30), age Number, status char(1), PRIMARY KEY (id))

最初の insertOne() または insertMany() 操作で暗黙的に作成されます。_id フィールドが指定されていない場合には、自動的にプライマリキー _id が追加されます。

db.people.insertOne( { user_id: "abc123", age: 55, status: "A" } )

ただし、コレクションを明示的に作成することもできます。

db.createCollection("people")
ALTER TABLE peopleADD join_date DATETIME

コレクションはドキュメントの構造を記述したり強制したりしません。つまり、コレクション レベルでの構造変更はありません。

ただし、ドキュメント レベルでは、updateMany() 操作により、$set 演算子を使用して既存のドキュメントにフィールドを追加できます。

db.people.updateMany( { }, { $set: { join_date: new Date() } })
ALTER TABLE peopleDROP COLUMN join_date

コレクションはドキュメントの構造を記述したり強制したりしません。つまり、コレクション レベルでの構造変更はありません。

ただし、ドキュメント レベルでは、updateMany() 操作により、$unset 演算子を使用してドキュメントからフィールドを削除できます。

db.people.updateMany( { }, { $unset: { "join_date": "" } })
CREATE INDEX idx_user_id_ascON people(user_id)
db.people.createIndex( { user_id: 1 } )
CREATE INDEX idx_user_id_asc_age_descON people(user_id, age DESC)
db.people.createIndex( { user_id: 1, age: -1 } )
DROP TABLE people
db.people.drop()

使用されるメソッドと演算子の詳細については、以下を参照してください。

次の表は、テーブルへのレコードの挿入に関連するさまざまな SQL のステートメントと、それに対応する MongoDB のステートメントを示しています。

SQL の INSERT ステートメント
MongoDB の insertOne() ステートメント
INSERT INTO people(user_id, age, status)VALUES ("bcd001", 45, "A")
db.people.insertOne( { user_id: "bcd001", age: 45, status: "A" })

詳細については、db.collection.insertOne() を参照してください。

次の表は、テーブルからのレコードの読み取りに関連するさまざまな SQL のステートメントと、それに対応する MongoDB のステートメントを示しています。

注意

find() メソッドでは、プロジェクションによって明示的に除外されない限り、返されるドキュメントには常に _id フィールドが含まれます。以下の一部の SQL クエリには、対応する find() クエリにフィールドが含まれていない場合でも、これを反映するために _id フィールドが含まれている場合があります。

SQL の SELECT ステートメント
MongoDB の find() ステートメント
SELECT *FROM people
db.people.find()
SELECT id, user_id, statusFROM people
db.people.find( { }, { user_id: 1, status: 1 })
SELECT user_id, statusFROM people
db.people.find( { }, { user_id: 1, status: 1, _id: 0 })
SELECT *FROM peopleWHERE status = "A"
db.people.find( { status: "A" })
SELECT user_id, statusFROM peopleWHERE status = "A"
db.people.find( { status: "A" }, { user_id: 1, status: 1, _id: 0 })
SELECT *FROM peopleWHERE status != "A"
db.people.find( { status: { $ne: "A" } })
SELECT *FROM peopleWHERE status = "A"AND age = 50
db.people.find( { status: "A", age: 50 })
SELECT *FROM peopleWHERE status = "A"OR age = 50
db.people.find( { $or: [ { status: "A" } , { age: 50 } ] })
SELECT *FROM peopleWHERE age > 25
db.people.find( { age: { $gt: 25 } })
SELECT *FROM peopleWHERE age < 25
db.people.find( { age: { $lt: 25 } })
SELECT *FROM peopleWHERE age > 25AND age <= 50
db.people.find( { age: { $gt: 25, $lte: 50 } })
SELECT *FROM peopleWHERE user_id like "%bc%"
db.people.find( { user_id: /bc/ } )

または

db.people.find( { user_id: { $regex: /bc/ } } )
SELECT *FROM peopleWHERE user_id like "bc%"
db.people.find( { user_id: /^bc/ } )

または

db.people.find( { user_id: { $regex: /^bc/ } } )
SELECT *FROM peopleWHERE status = "A"ORDER BY user_id ASC
db.people.find( { status: "A" } ).sort( { user_id: 1 } )
SELECT *FROM peopleWHERE status = "A"ORDER BY user_id DESC
db.people.find( { status: "A" } ).sort( { user_id: -1 } )
SELECT COUNT(*)FROM people
db.people.count()

or

db.people.find().count()
SELECT COUNT(user_id)FROM people
db.people.count( { user_id: { $exists: true } } )

or

db.people.find( { user_id: { $exists: true } } ).count()
SELECT COUNT(*)FROM peopleWHERE age > 30
db.people.count( { age: { $gt: 30 } } )

or

db.people.find( { age: { $gt: 30 } } ).count()
SELECT DISTINCT(status)FROM people
db.people.aggregate( [ { $group : { _id : "$status" } } ] )

または、BSON のサイズ制限を超えない個別の値セットの場合

db.people.distinct( "status" )
SELECT *FROM peopleLIMIT 1
db.people.findOne()

or

db.people.find().limit(1)
SELECT *FROM peopleLIMIT 5SKIP 10
db.people.find().limit(5).skip(10)
EXPLAIN SELECT *FROM peopleWHERE status = "A"
db.people.find( { status: "A" } ).explain()

使用されるメソッドと演算子についての詳細は、以下を参照してください。

次の表は、テーブル内の既存のレコードの更新に関連するさまざまな SQL のステートメントと、それに対応する MongoDB のステートメントを示しています。

SQL の Update ステートメント
MongoDB の updateMany() ステートメント
UPDATE peopleSET status = "C"WHERE age > 25
db.people.updateMany( { age: { $gt: 25 } }, { $set: { status: "C" } })
UPDATE peopleSET age = age + 3WHERE status = "A"
db.people.updateMany( { status: "A" } , { $inc: { age: 3 } })

例で使用されているメソッドと演算子の詳細については、以下を参照してください。

次の表は、テーブルからのレコードの削除に関連するさまざまな SQL のステートメントと、それに対応する MongoDB のステートメントを示しています。

SQL の Delete ステートメント
MongoDB の deleteMany() ステートメント
DELETE FROM peopleWHERE status = "D"
db.people.deleteMany( { status: "D" } )
DELETE FROM people
db.people.deleteMany({})

詳細については、db.collection.deleteMany() を参照してください。

このページを評価