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

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 people
ADD join_date DATETIME

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

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

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

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

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

db.people.updateMany(
{ },
{ $unset: { "join_date": "" } }
)
CREATE INDEX idx_user_id_asc
ON people(user_id)
db.people.createIndex( { user_id: 1 } )
CREATE INDEX
idx_user_id_asc_age_desc
ON 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,
status
FROM people
db.people.find(
{ },
{ user_id: 1, status: 1 }
)
SELECT user_id, status
FROM people
db.people.find(
{ },
{ user_id: 1, status: 1, _id: 0 }
)
SELECT *
FROM people
WHERE status = "A"
db.people.find(
{ status: "A" }
)
SELECT user_id, status
FROM people
WHERE status = "A"
db.people.find(
{ status: "A" },
{ user_id: 1, status: 1, _id: 0 }
)
SELECT *
FROM people
WHERE status != "A"
db.people.find(
{ status: { $ne: "A" } }
)
SELECT *
FROM people
WHERE status = "A"
AND age = 50
db.people.find(
{ status: "A",
age: 50 }
)
SELECT *
FROM people
WHERE status = "A"
OR age = 50
db.people.find(
{ $or: [ { status: "A" } , { age: 50 } ] }
)
SELECT *
FROM people
WHERE age > 25
db.people.find(
{ age: { $gt: 25 } }
)
SELECT *
FROM people
WHERE age < 25
db.people.find(
{ age: { $lt: 25 } }
)
SELECT *
FROM people
WHERE age > 25
AND age <= 50
db.people.find(
{ age: { $gt: 25, $lte: 50 } }
)
SELECT *
FROM people
WHERE user_id like "%bc%"
db.people.find( { user_id: /bc/ } )

または

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

または

db.people.find( { user_id: { $regex: /^bc/ } } )
SELECT *
FROM people
WHERE status = "A"
ORDER BY user_id ASC
db.people.find( { status: "A" } ).sort( { user_id: 1 } )
SELECT *
FROM people
WHERE 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 people
WHERE 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 people
LIMIT 1
db.people.findOne()

or

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

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

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

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

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

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

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

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