この章では、mongo shellを介してMongoDBの基本的なクエリ構文を紹介します。mongo shellでは、db.collection.find() メソッドを使用してデータをクエリします。

テストデータの準備

inventory コレクションにいくつかのデータを挿入します。

db.inventory.insertMany([
   { item: "journal", qty: 25, size: { h: 14, w: 21, uom: "cm" }, status: "A" },
   { item: "notebook", qty: 50, size: { h: 8.5, w: 11, uom: "in" }, status: "A" },
   { item: "paper", qty: 100, size: { h: 8.5, w: 11, uom: "in" }, status: "D" },
   { item: "planner", qty: 75, size: { h: 22.85, w: 30, uom: "cm" }, status: "D" },
   { item: "postcard", qty: 45, size: { h: 10, w: 15.25, uom: "cm" }, status: "A" }
]);

すべてのドキュメントをクエリ

inventory コレクションのすべてのドキュメントをクエリし、{} は空のクエリ条件を表します。

db.inventory.find( {} )

以下のSQL文と同様です:

SELECT * FROM inventory

等価クエリ条件

構文:

{ フィールド: 値, ... }

例1:

db.inventory.find( { status: "D" } )

以下のSQL文と同様です:

SELECT * FROM inventory WHERE status = "D"

例2: 入れ子フィールドクエリは、入れ子ドキュメントのフィールドをドット (.) で結合します。

db.inventory.find( { "size.uom": "in" } )

以下のSQL文と同様です:

SELECT * FROM inventory WHERE size.uom = "in"

注意: MongoDBドキュメントはJSON形式で保存されるため、入れ子フィールドをクエリ条件として使用できます。

クエリ演算子の使用

MongoDBはさまざまなクエリ演算子をサポートし、さまざまな複雑なクエリを実装できます。 構文:

{ <field1>: { <operator1>: <value1> }, ... }

説明:

  • field1: フィールド名
  • operator1: 演算子
  • value1: 演算子のパラメータ

$in 演算子の例:

db.inventory.find( { status: { $in: [ "A", "D" ] } } )

以下のSQLの "in" 演算子を使用したクエリと同様です:

SELECT * FROM inventory WHERE status in ("A", "D")

注意: 演算子の詳細については、後続のMongoDBクエリの詳細セクションを参照してください。

and条件

SQLと同様に、MongoDBもand条件をサポートしています。

例:

// 複数の条件を連続して入力し、andを使用して条件を接続します
db.inventory.find( { status: "A", item: "postcard"} )

以下のSQL文と同様です:

SELECT * FROM inventory WHERE status = "A" AND item = "postcard"

or条件

SQLと同様に、MongoDBもor条件をサポートしており、$or演算子を使用して実装します。

構文:

{
	$or: [
		{条件1},
		{条件2},
		.....
	]
}

例:

db.inventory.find( { $or: [ { status: "A" }, { item: "postcard"} ] } )

以下のSQL文と同様です:

SELECT * FROM inventory WHERE status = "A" OR item = "postcard"

and条件とor条件の組み合わせ

SQLと同様に、MongoDBではandとorを使用して複雑なクエリ条件を組み合わせることができます。

例:

db.inventory.find( {
     status: "A",
     $or: [ { qty: { $lt: 30 } }, { item: /^p/ } ]
} )

ここでは、$lt演算子と正規表現の一致が使用されています。

これは以下のSQL文と同様です:

SELECT * FROM inventory WHERE status = "A" AND ( qty  < 30 or item like 'p%')

ヒント: MongoDBクエリ条件の詳細な説明については、後続の章を参照してください。