MongoDBでは、$exists
を使用できます 特定のフィールドを含むドキュメントを照合するための要素クエリ演算子。
また、特定のフィールドを含まないドキュメントと照合するためにも使用できます。
$nin
などの他の演算子と組み合わせて使用することもできます 特定のフィールドが存在するが、特定の値が含まれていないドキュメントと照合します。
例
cats
というコレクションがあるとします。 次のドキュメントが含まれています:
{ "_id" : 1, "name" : "Scratch", "born" : "March, 2020" } { "_id" : 2, "name" : "Meow", "weight" : 30 } { "_id" : 3, "name" : "Fluffy", "height" : 15 } { "_id" : 4, "name" : "Sox", "weight" : 40 } { "_id" : 5, "name" : null, "weight" : 20 } { "_id" : 6, "height" : 20, "born" : ISODate("2021-01-03T23:30:15.123Z") }
これらの文書は、それらが持っている分野に関してわずかに矛盾しています。 weight
を持つものもあります フィールド、他の人はheight
フィールドには、born
があるものもあります フィールドなど
$exists
を使用できます 特定のフィールドを持つそのコレクションからドキュメントを返す演算子。
例:
db.cats.find( { weight: { $exists: true } } )
結果:
{ "_id" : 2, "name" : "Meow", "weight" : 30 } { "_id" : 4, "name" : "Sox", "weight" : 40 } { "_id" : 5, "name" : null, "weight" : 20 }
weight
を含むドキュメントのみが表示されます フィールドが返されます。
null
を含むフィールド
$exists
演算子には、null
を含むフィールドが含まれます 。 null
を区別しません および非null
値。
例:
db.cats.find( { name: { $exists: true } } )
結果:
{ "_id" : 1, "name" : "Scratch", "born" : "March, 2020" } { "_id" : 2, "name" : "Meow", "weight" : 30 } { "_id" : 3, "name" : "Fluffy", "height" : 15 } { "_id" : 4, "name" : "Sox", "weight" : 40 } { "_id" : 5, "name" : null, "weight" : 20 }
name
にもかかわらず、ドキュメント5が返されたことがわかります。 フィールドはnull
。
特定の値なしで存在する
$exists
を組み合わせることができます 他の演算子を使用して、フィールドを含むが、そのフィールドに特定の値が含まれていないドキュメントを返します。
例:
db.cats.find( { weight: { $exists: true, $nin: [20,30] } } )
結果:
{ "_id" : 4, "name" : "Sox", "weight" : 40 }
これは、単に$nin
を使用した場合に見られる結果とは異なります。 $exists
なし オペレーター。
これがどのように見えるかです:
db.cats.find( { weight: { $nin: [20,30] } } )
結果:
{ "_id" : 1, "name" : "Scratch", "born" : "March, 2020" } { "_id" : 3, "name" : "Fluffy", "height" : 15 } { "_id" : 4, "name" : "Sox", "weight" : 40 } { "_id" : 6, "height" : 20, "born" : ISODate("2021-01-03T23:30:15.123Z") }
特定のフィールドを含まないドキュメント
$exists: false
を使用できます しないドキュメントを返す 指定されたフィールドが含まれます。
例:
db.cats.find( { name: { $exists: false } } )
結果:
{ "_id" : 6, "height" : 20, "born" : ISODate("2021-01-03T23:30:15.123Z") }
この場合、コレクション内の1つのドキュメントにname
が含まれていません フィールド。
複数のフィールドを確認する
複数のフィールドが存在するかどうかは、コンマで区切って確認できます。
例:
db.cats.find( {
name: { $exists: true },
height: { $exists: true }
} )
結果:
{ "_id" : 3, "name" : "Fluffy", "height" : 15 }
この例では、name
の両方を含むすべてのドキュメントが返されます フィールドとheight
フィールド。