クエリを指定する
Overview
ほとんどの CRUD 操作では、クエリ ドキュメントで一致基準を指定することにより、一致するドキュメントのセットを絞り込むことができます。クエリ ドキュメントには、結果セットに含めるドキュメントを決定する特定のフィールドに適用される 1 つ以上のクエリ演算子が含まれます。
クエリ ドキュメントでは、{0 などのリテラル値とフィールドを照合することも、{ title: 'The Room' }
クエリ演算子 Expressを作成してより複雑な一致条件を することもできます。このガイドでは、MongoDB のクエリ演算子の次のカテゴリをカバーし、その使用方法の例を示します。
このガイドの例えに従うには、次のコード スニペットを使用して、完了を説明するドキュメントをmyDB.fruits
コレクションに挿入します。
const myDB = client.db("myDB"); const myColl = myDB.collection("fruits"); await myColl.insertMany([ { "_id": 1, "name": "apples", "qty": 5, "rating": 3 }, { "_id": 2, "name": "bananas", "qty": 7, "rating": 1, "color": "yellow" }, { "_id": 3, "name": "oranges", "qty": 6, "rating": 2 }, { "_id": 4, "name": "avocados", "qty": 3, "rating": 5 }, ]);
注意
クエリ操作により、一致するドキュメントを含むカーソルへの参照が返される場合があります。 カーソルに保存されているデータを調べる方法については、「 カーソルの基礎ページ 」を参照してください。
リテラル値のクエリ
リテラル値クエリを使用すると、クエリ ドキュメントで指定した値と完全に一致するデータをクエリできます。リテラル値クエリには、フィールド名と値の 2 つの部分があります。このようなクエリから返されるドキュメントには、指定された名前とまったく同じ名前を持つフィールドと、指定された値とまったく同じそのフィールドの値が含まれている必要があります。次の操作では、リテラル値クエリを使用して、値が「apples」である「name」というフィールドを含むドキュメントを検索します。
const query = { "name": "apples" }; const cursor = myColl.find(query); for await (const doc of cursor) { console.dir(doc); }
このコード スニペットは、次の結果を返します。
{ "_id": 1, "name": "apples", "qty": 5, "rating": 3 }
注意
リテラル値クエリは $eq
比較演算子と等価である。その結果、次の 2 つのクエリは同等になります。
myColl.find({ rating: { $eq: 5 } });
myColl.find({ rating: 5 });
比較演算子
比較演算子を使用すると、コレクション内の値との比較に基づいてデータをクエリできます。一般的な比較演算子には、「より大きい」比較用の $gt
、「より小さい」比較用の $lt
、「等しくない」比較用の $ne
などがあります。次の操作では、比較演算子 $gt
を使用して、qty
フィールドの値が 5
より大きいドキュメントを検索し、それらを出力します。
// $gt means "greater than" const query = { qty: { $gt : 5 } }; const cursor = myColl.find(query); for await (const doc of cursor) { console.dir(doc); }
このコード スニペットは、次の結果を返します。
{ "_id": 2, "name": "bananas", "qty": 7, "rating": 1 } { "_id": 3, "name": "oranges", "qty": 6, "rating": 2 }
論理演算子
論理演算子を使用すると、フィールド レベルの演算子の結果に適用されたロジックを使用してデータをクエリできます。たとえば、$or
メソッドを使用して、$gt
比較演算子またはリテラル値クエリのいずれかに一致するドキュメントをクエリできます。次の操作では、論理演算子 $not
を使用して、数量値が 5 以下のドキュメントを検索し、出力します。
const query = { qty: { $not: { $gt: 5 }}}; const cursor = myColl.find(query); for await (const doc of cursor) { console.dir(doc); }
このコード スニペットは、次の結果を返します。
{ "_id": 4, "name": "avocados", "qty": 3, "rating": 5 } { "_id": 1, "name": "apples", "qty": 5, "rating": 3 }
注意
クエリ ドキュメントに複数の要素が含まれている場合、それらの要素は暗黙的な $and
論理演算子を使用して結合され、クエリに一致するドキュメントが判別されます。その結果、次の 2 つのクエリは同等になります。
myColl.find({ rating: { $eq: 5 }, qty: { $gt: 4 } });
myColl.find({ $and: [ { rating: { $eq: 5 }}, { qty: { $gt: 4 }} ] });
比較演算子の詳細については、「比較クエリ演算子 」に関する参考マニュアル エントリを参照してください。
要素演算子
要素演算子を使用すると、フィールドの存在、不在、または型に基づいてクエリを実行できます。次の操作では、要素演算子 $exists
を使用して、color
フィールドを含むドキュメントを検索します。
const query = { color: { $exists: true } }; const cursor = myColl.find(query); for await (const doc of cursor) { console.dir(doc); }
このコード スニペットは、次の結果を返します。
{ "_id": 2, "name": "bananas", "qty": 7, "rating": 1, "color": "yellow" }
この演算子の詳細については、 $exists 演算子のリファレンス マニュアル エントリを参照してください。
評価演算子
評価演算子を使用すると、コレクション内のドキュメントをクエリするときに、正規表現やテキスト検索などの高レベルのロジックを実行できます。一般的な評価演算子には $regex
と $text
が含まれます。次の操作では、評価演算子 $mod
を使用して、qty
フィールド値が 3 で割り切れて余りが 0 になるドキュメントを検索します。
// $mod means "modulo" and returns the remainder after division const query = { qty: { $mod: [ 3, 0 ] } }; const cursor = myColl.find(query); for await (const doc of cursor) { console.dir(doc); }
このコード スニペットは、次の結果を返します。
{ "_id": 3, "name": "oranges", "qty": 6, "rating": 2 } { "_id": 4, "name": "avocados", "qty": 3, "rating": 5 }
この演算子の詳細については、 $mod 演算子の参考マニュアル エントリを参照してください。