MongoDB
 Computer >> コンピューター >  >> プログラミング >> MongoDB

MongoDBで「フィールドが存在しない」条件を使ってドキュメントを検索する方法

MongoDBでは、$exists 演算子に false を指定することで、「特定のフィールドを持たないドキュメント」を簡単に検索できます。データの整合性チェックや、未入力項目の洗い出しなどに役立つ便利なテクニックです。

基本構文

フィールドが存在しないドキュメントを検索する場合の基本構文は以下のとおりです。

db.yourCollectionName.find({ "yourFieldName" : { "$exists" : false } }).pretty();

サンプルコレクションの作成

実際に動きを確認するために、サンプルのコレクションを作成してみましょう。まずはドキュメントを挿入します。

> db.findDocumentNonExistenceFieldDemo.insertOne({"StudentName":"John","StudentAge":25});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c8a5c629064dcd4a68b70e8")
}
> db.findDocumentNonExistenceFieldDemo.insertOne({"StudentName":"David","StudentAge":26,"StudentMathMarks":78});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c8a5c809064dcd4a68b70e9")
}

この例では、1件目のドキュメント(John)には StudentMathMarks フィールドがなく、2件目のドキュメント(David)には存在するという状態を作っています。

登録済みドキュメントの確認

find() メソッドを使って、コレクション内のすべてのドキュメントを表示します。

> db.findDocumentNonExistenceFieldDemo.find().pretty();

実行結果は次のとおりです。

{
    "_id" : ObjectId("5c8a5c629064dcd4a68b70e8"),
    "StudentName" : "John",
    "StudentAge" : 25
}
{
    "_id" : ObjectId("5c8a5c809064dcd4a68b70e9"),
    "StudentName" : "David",
    "StudentAge" : 26,
    "StudentMathMarks" : 78
}

$exists: false でフィールドが存在しないドキュメントを検索

それでは、StudentMathMarks フィールドが存在しないドキュメントだけを抽出してみましょう。クエリは以下のようになります。

> db.findDocumentNonExistenceFieldDemo.find({ "StudentMathMarks" : { "$exists" : false } }).pretty();

実行結果:

{
    "_id" : ObjectId("5c8a5c629064dcd4a68b70e8"),
    "StudentName" : "John",
    "StudentAge" : 25
}

ご覧のとおり、StudentMathMarks フィールドを持たない John のドキュメントのみが返されました。

補足:$exists の注意点

$exists: false は「フィールドそのものが存在しない」ドキュメントにマッチします。値が null の場合はフィールド自体は存在しているため、意図した結果にならないことがあります。null 値も含めて検索したい場合は、$exists と $or を組み合わせるか、インデックス設計を見直すことをおすすめします。また、検索対象のフィールドにスパースインデックス(sparse index)を作成しておくと、大規模コレクションでも効率的に検索できます。

  1. MongoDBでフィールド名を変更する方法:$projectを使った手順を解説

    MongoDBでフィールド名を変更するには?MongoDBでは、集計パイプラインの $project ステージを使用することで、既存のフィールド名を別の名前に変更して出力することができます。ここでは、実際にコレクションを作成し、「Name」というフィールドを「FullName」に変更する手順を順番に見ていきましょう。1. サンプルコレクションの作成まずは、insertOne() メソッドを使ってドキュメントを含むコレクションを作成します。> db.demo517.insertOne({Name:Chris Brown});{ acknowledged : true, inse

  2. MongoDBの埋め込みドキュメントから特定の要素を抽出する方法($unwind・$match・$projectの活用)

    MongoDBでは、配列形式の埋め込みドキュメントから特定の条件に合う要素だけを取り出したい場面がよくあります。そのような場合は、集計(Aggregation)パイプラインで $unwind、$match、$project を組み合わせることで、目的のデータを効率的に抽出できます。コレクションの作成とドキュメントの挿入まず、insertOne() メソッドを使って、学生情報を配列として持つコレクションを作成します。> db.demo744.insertOne( ... { ... studentInformation: ... [ ...