SELECT *をプロジェクションなしのMongoDB find()に変換する

SQL SELECT *がプロジェクション引数なしのMongoDB find()呼び出しに変換され、マッチするドキュメントのすべてのフィールドが返される方法を学びます。

Basic Queries

詳細な説明

SELECT *と全ドキュメント取得

SQLがSELECT *を使用してすべてのカラムを取得する場合、MongoDBの同等物はプロジェクション引数なしのfind()呼び出しです。マッチするドキュメントに格納されたすべてのフィールドが、MongoDBが自動的に追加する_idフィールドを含めて返されます。

SQLの例

SELECT * FROM products

生成されるMongoDBクエリ

db.products.find(
  {}
)

プロジェクションが不要な理由

MongoDBでは、find()の第2引数を省略すると「すべてのフィールドを返す」ことを意味します。これはSQLのSELECT *と完全に同等です。MongoDBのドキュメントはスキーマが柔軟であり、同じコレクション内の異なるドキュメントが異なるフィールドを持つ可能性があるため、すべてのフィールドを列挙する必要はありません。

パフォーマンスの考慮事項

SQLでSELECT *が不必要なデータを取得するため本番クエリで推奨されないのと同様に、MongoDBでも同じことが当てはまります。多くのフィールドや埋め込み配列を持つ大きなドキュメントの場合、プロジェクションを追加して返されるフィールドを制限することで、ネットワーク転送とメモリ使用量を大幅に削減できます。

_idフィールド

明示的に選択する必要があるSQL主キーとは異なり、MongoDBはプロジェクションで_id: 0と明示的に除外しない限り、常に_idフィールドを返します。SELECT *の変換では、すべてのフィールドが返されるため、これは問題になりません。

ユースケース

早期段階の移行や探索的なデータ分析では、開発者はレコードの完全な構造を検査するためにSELECT *を頻繁に使用します。このパターンをMongoDBに変換することで、チームはドキュメントスキーマに元のSQLテーブルのすべての期待されるフィールドが含まれていることを検証できます。

試してみる — SQL to MongoDB Query

フルツールを開く