MongoDB条件付き演算子 ドキュメントフィールドの値が対応する条件を指定します。
クエリ演算子の比較
- $ eq (等しい)
- $ ne (等しくない)
- $ gt (以上)
- $ lt (未満)
- $ gte (多かれ少なかれ)
- $ lte (以下)
- $ in 値の配列を定義します。そのうちの1つにはドキュメントフィールドが必要です
- $ nin ドキュメントフィールドを持たない値の配列を定義します
たとえば、年齢キーの値が30未満のすべてのドキュメントが見つかります:
db.users.find ({age: {$lt : 30}})
他の比較演算子の使用も同様です。たとえば、同じキーで30を超える場合:
db.users.find ({age: {$gt : 30}})
ここでの比較は、文字列ではなく整数型に対して行われることに注意してください。 キーの年齢が文字列値を表す場合、比較は次の行で実行する必要があります:db.users.find({age:{$ gt:“ 30”}})が、結果は同じになります。
ただし、年齢フィールドの値が30より大きく50未満のすべてのボリュームを検索する必要がある状況を想像してみましょう。この場合、2つの演算子を組み合わせることができます。
db.users.find ({age: {$gt : 30, $lt: 50}})
22歳のユーザーを検索します:
db.users.find ({age: {$eq : 22}})
本質的に、これは次のクエリのアナロジーです:
db.users.find ({age: 22})
逆操作–年齢が22歳ではないユーザーを検索します:
db.users.find ({age: {$ne : 22}})
$ in演算子は、可能な式の配列を定義し、値が配列内にあるキーを検索します。
db.users.find ({age: {$in : [22, 32]}})
反対に、$ nin演算子は可能な式の配列を定義し、この配列に値がないキーを検索します。
db.users.find({age:{$ nin:[22、32]}})
論理演算子
論理演算子はサンプリング条件で実行されます:
- $または :2つの条件を接続し、ドキュメントはこれらの条件の1つを満たす必要があります
- $ and: 2つの条件を結び付け、ドキュメントは両方の条件を満たしている必要があります
- $ not: ドキュメントが条件と一致してはなりません
- $ nor: 2つの条件を結び付け、ドキュメントが両方の条件を満たさないようにする必要があります
MongoDBサンプル演算子
$ or演算子は、論理OR演算を表し、ドキュメントに存在する必要のあるキーと値のペアのセットを定義します。 また、ドキュメントにそのようなキーと値のペアが少なくとも1つある場合、そのドキュメントはこのクエリに対応し、データベースから抽出されます。
db.users.find ({$or : [{name: "Tom"}, {age: 22}]})
この式は、name=Tomまたはage=22のいずれかを持つすべてのドキュメントを返します。
別の例では、name=Tomおよびage=22のいずれか、または言語値に「german」が含まれるすべてのドキュメントが返されます。
db.users.find ({name: "Tom", $or : [{age: 22}, {languages: "german"}]})
条件演算子は、部分式または部分式で使用できます:
db.users.find ({$or : [{name: "Tom"}, {age: {$gte:30}}]})
この場合、name =” Tom”または年齢フィールドの値が30以上であるすべてのドキュメントを選択します。
オペレーター$および
$ and演算子は、論理演算AND(論理乗算)を表し、ドキュメントが満たす必要のある一連の基準を定義します。 $ or演算子とは異なり、ドキュメントは指定されたすべての基準を満たす必要があります。例:
db.users.find ({$and : [{name: "Tom"}, {age: 32}]})
ここで選択したドキュメントの名前はトムと32歳である必要があります。どちらもこれらの機能です。
MongoDB配列検索
一部の演算子は配列を操作するように設計されています:
- $ all: 配列に存在する必要のある値のセットを定義します
- $ size: 配列に含める必要のある要素の数を定義します
- $ elemMatch: 配列内の要素が対応しなければならない条件を指定します
MongoDB $ all
$ all演算子は、可能な式の配列を定義し、ドキュメントに定義された式のセット全体が含まれている必要があります。 したがって、配列を検索するために使用されます。たとえば、ドキュメントには、ユーザーが話す外国語を格納する一連の言語があります。また、英語とフランス語の両方を同時に話すすべての人を見つけるには、次の式を使用できます。
db.users.find ({languages: {$all : ["english", "french"]}})
オペレーター$elemMatch
$ elemMatch演算子を使用すると、特定の条件下に該当する要素が配列に含まれているドキュメントを選択できます。 たとえば、データベースに特定のコースのユーザー評価のコレクションを含めるとします。いくつかのドキュメントを追加しましょう:
db.grades.insertMany([{student: "Tom", courses:[{name: "Java", grade: 5}, {name: "MongoDB", grade: 4}]},
{student: "Alice", courses:[{name: "C++", grade: 3}, {name: "MongoDB", grade: 5}]}))
各ドキュメントには配列があり、配列はネストされたドキュメントで構成されています。
これで、MongoDBコースの成績が3を超える学生が見つかります:
db.grades.find({courses: {$elemMatch: {name: "MongoDB", grade: {$gt: 3}}}})
オペレーター$size
$ size演算子は、配列に$sizeの値と等しい数の要素が含まれるドキュメントを検索するために使用されます。 たとえば、laguages配列に2つの要素があるすべてのドキュメントを抽出してみましょう。
db.users.find ({languages: {$size:2}})
このようなクエリは、たとえば、次のドキュメントに対応します。
{"name": "Tom", "age": 32, languages: ["english", "german"]}
オペレーター$exists
$ exits演算子を使用すると、特定のキーが存在するか存在しないドキュメントのみを抽出できます。 たとえば、会社のキーを含むすべてのドキュメントを返します。
db.users.find ({company: {$exists:true}})
falseパラメータとして$existsを指定すると、クエリは会社のキーを含まないドキュメントのみを返します。
演算子$type
$ type演算子は、特定のキーが特定のタイプの値(文字列や数値など)を持つドキュメントのみを抽出します。
db.users.find ({age: {$type: "string"}})
> db.users.find ({age: {$type: "number"}})
演算子$regex
$ regex演算子は、フィールド値が対応する正規表現を指定します 。たとえば、フィールド名に必ず文字「b」を付けるとします。
db.users.find ({name: {$regex: "b"}})
$ regexは文字列だけでなく、正規表現を使用することを理解することが重要です。例:name:{$ regex:“ om $”} –nameの値は“ om”で終わる必要があります。