MongoDB の NOT IN 比較演算子

Mehvish Ashiq 2023年1月30日
  1. MongoDB の $ninNOT IN)比較演算子
  2. $nin 演算子を find() メソッドとともに使用して、MongoDB のフィールドをクエリする
  3. $nin 演算子を find() メソッドとともに使用して、MongoDB の埋め込みドキュメントをクエリする
  4. MongoDB で $nin 演算子を find() メソッドとともに使用して配列をクエリする
  5. $nin 演算子を find() メソッドとともに使用して、MongoDB のドキュメントの配列をクエリする
  6. $nin 比較演算子を update() メソッドとともに使用して、MongoDB のフィールド値を更新する
  7. MongoDB の正規式で $nin 演算子を使用する
MongoDB の NOT IN 比較演算子

比較演算子は、大規模なデータセットを操作するときに非常に役立ちます。データから洞察を得るのに役立ちます。

このチュートリアルでは、MongoDB で $ninNOT IN)比較演算子を使用する方法について説明します。

また、MongoDB の find() および update() メソッドで $nin を使用する方法も示します。さらに、$nin 演算子を使用した正規式の使用法についても学習します。

MongoDB の $ninNOT IN)比較演算子

$nin は、MongoDB の比較演算子の 1つです。この演算子は、フィールド値が指定された配列に属していないか、フィールドが存在しないドキュメントを選択します。

フィールドが配列、ドキュメントの配列、または埋め込まれたドキュメントの配列を保持している場合、フィールドが配列を保持し、指定された配列の値に等しいアイテムがないドキュメントのみを取得します(このシナリオも後で表示されます)このチュートリアルでは)。

詳細を掘り下げる前に、いくつかのドキュメントを含むサンプルコレクションを作成しましょう。

サンプルコード:

db.createCollection('students');
db.students.insertMany([
    {
        "name": {first: "Mehvish", last: "Ashiq"},
        "age": 30,
        "gender": "Female",
        "discipline": "BSCS",
        "joining_year": 2014,
        "department": "Computer Science",
        "courses":[ "Python","Java", "Machine Learning", "Data Science"],
        "contact":[
            { phone: { type: "cell", number: "923042516485" }},
            { mail: { type: "official", email: "mehvishofficial@gmail.com"}}
        ]
    },
    {
        "name": {first: "Aftab", last: "Raza"},
        "age": 25,
        "gender": "Male",
        "discipline": "BSIT",
        "joining_year": 2012,
        "department": "Information Technology",
        "courses":[ "Python","JavaScript", "Information Security"],
        "contact":[
            { phone: { type: "landline", number: "111-444-5555" }},
            { mail: { type: "personal", email: "aftab@hotmail.com"}}
        ]
    }
])

db.students.find().pretty()

出力:

{
        "_id" : ObjectId("6298ef54271c5124b739d7d3"),
        "name" : {
                "first" : "Mehvish",
                "last" : "Ashiq"
        },
        "age" : 30,
        "gender" : "Female",
        "discipline" : "BSCS",
        "joining_year" : 2014,
        "department" : "Computer Science",
        "courses" : [
                "Python",
                "Java",
                "Machine Learning",
                "Data Science"
        ],
        "contact" : [
                {
                        "phone" : {
                                "type" : "cell",
                                "number" : "923042516485"
                        }
                },
                {
                        "mail" : {
                                "type" : "official",
                                "email" : "mehvishofficial@gmail.com"
                        }
                }
        ]
}
{
        "_id" : ObjectId("6298ef54271c5124b739d7d4"),
        "name" : {
                "first" : "Aftab",
                "last" : "Raza"
        },
        "age" : 25,
        "gender" : "Male",
        "discipline" : "BSIT",
        "joining_year" : 2012,
        "department" : "Information Technology",
        "courses" : [
                "Python",
                "JavaScript",
                "Information Security"
        ],
        "contact" : [
                {
                        "phone" : {
                                "type" : "landline",
                                "number" : "111-444-5555"
                        }
                },
                {
                        "mail" : {
                                "type" : "personal",
                                "email" : "aftab@hotmail.com"
                        }
                }
        ]
}

少し複雑なドキュメントを作成する唯一の理由は、さまざまなフィールドでの $nin 比較演算子の使用法を学ぶことです。たとえば、単一のフィールド、埋め込みドキュメントを含むフィールド、配列を含むフィールド、および埋め込みドキュメントの配列。

$nin 演算子を find() メソッドとともに使用して、MongoDB のフィールドをクエリする

サンプルコード:

db.students.find({ "joining_year": { $nin: [2011,2014] }}).pretty();

出力:

{
        "_id" : ObjectId("6298ef54271c5124b739d7d4"),
        "name" : {
                "first" : "Aftab",
                "last" : "Raza"
        },
        "age" : 25,
        "gender" : "Male",
        "discipline" : "BSIT",
        "joining_year" : 2012,
        "department" : "Information Technology",
        "courses" : [
                "Python",
                "JavaScript",
                "Information Security"
        ],
        "contact" : [
                {
                        "phone" : {
                                "type" : "landline",
                                "number" : "111-444-5555"
                        }
                },
                {
                        "mail" : {
                                "type" : "personal",
                                "email" : "aftab@hotmail.com"
                        }
                }
        ]
}

この例では、$nin 演算子を find() メソッドとともに使用して、joining_year2011 でも 2014 でもないドキュメント全体を検索します。

ドキュメント全体ではなく特定のフィールドのみを表示する場合は、次のようにコマンドを使用できます。1 を書き込むと、フィールドとその値がコンピューター画面に出力されます。0 は、このフィールドが結果セットに含まれないことを意味します。

サンプルコード:

db.students.find(
    { "joining_year": { $nin: [2011,2014] }},
    {"name": 1, "discipline": 1, "department": 1, "_id":0}
).pretty();

出力:

{
        "name" : {
                "first" : "Aftab",
                "last" : "Raza"
        },
        "discipline" : "BSIT",
        "department" : "Information Technology"
}

$nin 演算子を find() メソッドとともに使用して、MongoDB の埋め込みドキュメントをクエリする

サンプルコード:

db.students.find(
    { "name.last": { $nin: ["Raza", "Ali"] }},
    { "name": 1, "gender": 1, "age": 1, "_id":0}
).pretty();

出力:

{
        "name" : {
                "first" : "Mehvish",
                "last" : "Ashiq"
        },
        "age" : 30,
        "gender" : "Female"
}

サンプルドキュメントには、このチュートリアルの name という名前のフィールドがあり、さらに 2つのフィールド(firstlast)を持つ埋め込みドキュメントが含まれています。 $nin 比較演算子を name フィールドで使用するには、ドット表記 name.first を使用します。

このコードスニペットでは、name.last の値が $nin に指定された配列のメンバーではないドキュメントの nameage、および gender を取得しようとしています。オペレーター。

name.lastRaza でも Ali でもないドキュメントから指定されたフィールドを取得します。 $nin 演算子で AND 条件を使用することもできます。

サンプルコード:

db.students.find(
    { "name.last": { $nin: ["Raza", "Ali"]}, "name.first": {$nin: ["Mehvish"]}},
    { "name": 1, "gender": 1, "age": 1, "_id":0}
).pretty();

今回は、最初のドキュメントの name.first の値として Mehvish があり、2 番目のドキュメントの name.last フィールドの値として Raza が含まれている 2つのドキュメントがあるため、出力は得られません。したがって、両方のドキュメントが結果セットから除外され、何も得られませんでした。

MongoDB で $nin 演算子を find() メソッドとともに使用して配列をクエリする

サンプルコード:

db.students.find(
    { "courses": { $nin: ["JavaScript", "Networking", "Psychology"] }},
    { "courses": 1, "department": 1, "_id":0}
).pretty();

出力:

{
        "department" : "Computer Science",
        "courses" : [
                "Python",
                "Java",
                "Machine Learning",
                "Data Science"
        ]
}

この出力を注意深く理解してください。この出力では、course フィールドは、$nin 演算子の指定された配列の値に等しい要素を持たない配列を保持します。

JavaScriptNetworking、または Psychology に等しい要素を持つ配列を含むフィールドが結果セットから除外されるドキュメント全体。

$nin 演算子を find() メソッドとともに使用して、MongoDB のドキュメントの配列をクエリする

このチュートリアルの冒頭で学生コレクションにデータを入力するときに使用した連絡先フィールドを注意深く観察してください。これには、各ドキュメントに埋め込まれた(ネストされた)ドキュメントが含まれるドキュメントの配列が含まれています。

$nin 演算子を使用してそれを照会するにはどうすればよいですか?以下の例を参照してください。

db.students.find(
    { "contact.phone.type": { $nin: ["cell"] }},
    { "contact": 1, "department": 1, "_id":0}
).pretty();

出力:

{
        "department" : "Information Technology",
        "contact" : [
                {
                        "phone" : {
                                "type" : "landline",
                                "number" : "111-444-5555"
                        }
                },
                {
                        "mail" : {
                                "type" : "personal",
                                "email" : "aftab@hotmail.com"
                        }
                }
        ]
}

$nin 比較演算子を update() メソッドとともに使用して、MongoDB のフィールド値を更新する

サンプルコード:

db.students.update(
    { "joining_year": {$nin: [2011,2014]}},
    { $set: {"joining_year": 2000}}
);

このコードスニペットでは、joining_year2014 でも 2011 でもないドキュメントを取得し、joining_year の値を 2000 に設定します。次に、次のコマンドを使用して、更新されたドキュメントを表示します。

db.students.find().pretty()

MongoDB の正規式で $nin 演算子を使用する

サンプルコード:

var array_of_regex = [/Data+/];
db.students.find(
    { "courses": {$nin: array_of_regex}},
    {"name":1, "courses":1, "department":1, "_id":0}
).pretty();

出力:

{
        "name" : {
                "first" : "Aftab",
                "last" : "Raza"
        },
        "department" : "Information Technology",
        "courses" : [
                "Python",
                "JavaScript",
                "Information Security"
        ]
}

この例では、さまざまな正規表現を含むことができる配列を作成します。今のところ、正規式は 1つだけです。

なぜ regexes の配列を作成する必要があるのですか?これは、$nin が比較対象の配列を使用するためです。

著者: Mehvish Ashiq
Mehvish Ashiq avatar Mehvish Ashiq avatar

Mehvish Ashiq is a former Java Programmer and a Data Science enthusiast who leverages her expertise to help others to learn and grow by creating interesting, useful, and reader-friendly content in Computer Programming, Data Science, and Technology.

LinkedIn GitHub Facebook

関連記事 - MongoDB Operator