MongoDB의 NOT IN 비교 연산자

Mehvish Ashiq 2023년1월30일
  1. MongoDB의 $nin(NOT IN) 비교 연산자
  2. $nin 연산자를 find() 메서드와 함께 사용하여 MongoDB에서 필드 쿼리
  3. find() 메소드와 함께 $nin 연산자를 사용하여 MongoDB에 포함된 문서 쿼리
  4. $nin 연산자를 find() 메서드와 함께 사용하여 MongoDB에서 배열 쿼리
  5. $nin 연산자를 find() 메서드와 함께 사용하여 MongoDB에서 문서 배열 쿼리
  6. $nin 비교 연산자를 update() 메서드와 함께 사용하여 MongoDB에서 필드 값 업데이트
  7. MongoDB에서 정규 표현식과 함께 $nin 연산자 사용
MongoDB의 NOT IN 비교 연산자

비교 연산자는 큰 데이터 세트로 작업할 때 매우 유용합니다. 데이터에서 통찰력을 얻는 것이 도움이 됩니다.

이 튜토리얼은 MongoDB에서 $nin(NOT IN) 비교 연산자를 사용하는 방법에 대해 설명합니다.

또한 MongoDB에서 find()update() 메소드와 함께 $nin을 사용하는 방법을 보여줍니다. 또한 $nin 연산자로 정규식을 사용하는 방법도 배웁니다.

MongoDB의 $nin(NOT IN) 비교 연산자

$nin은 MongoDB의 비교 연산자 중 하나입니다. 이 연산자는 필드 값이 지정된 배열에 속하지 않거나 필드가 존재하지 않는 문서를 선택합니다.

필드에 배열, 문서 배열 또는 포함된 문서 배열이 있는 경우 지정된 배열의 값과 동일한 항목이 없는 배열이 필드에 포함된 문서만 가져옵니다(이 시나리오도 나중에 보게 됩니다. 이 튜토리얼에서).

더 자세히 알아보기 전에 몇 가지 문서가 있는 샘플 컬렉션을 만들어 보겠습니다.

예제 코드:

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"
                        }
                }
        ]
}

이 예에서 find() 메서드와 함께 $nin 연산자를 사용하여 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"
}

find() 메소드와 함께 $nin 연산자를 사용하여 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이라는 필드가 있으며, 여기에는 두 개의 필드(firstlast)가 있는 포함된 문서가 더 포함됩니다. name 필드와 함께 $nin 비교 연산자를 사용하기 위해 점 표기법 name.first를 사용합니다.

이 코드 조각의 경우 name.last 값이 $nin에 대해 지정된 배열의 구성원이 아닌 문서의 name, agegender를 검색하려고 합니다. 운영자.

name.lastRazaAli도 아닌 문서에서 지정된 필드를 가져옵니다. $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를 갖고 있고 두 번째 문서는 name.last 필드의 값으로 Raza를 포함하는 두 개의 문서가 있기 때문에 출력을 얻지 못할 것입니다. . 따라서 두 문서 모두 결과 집합에서 제외되고 아무 것도 얻지 못했습니다.

$nin 연산자를 find() 메서드와 함께 사용하여 MongoDB에서 배열 쿼리

예제 코드:

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 연산자에 대해 지정된 배열의 값과 동일한 요소가 없는 배열을 보유합니다.

JavaScript, Networking 또는 Psychology와 같은 요소가 있는 배열을 포함하는 필드가 결과 집합에서 제외되는 전체 문서입니다.

$nin 연산자를 find() 메서드와 함께 사용하여 MongoDB에서 문서 배열 쿼리

이 튜토리얼의 시작 부분에서 students 컬렉션을 채우는 동안 사용한 contact 필드를 주의 깊게 관찰하십시오. 여기에는 각 문서에 포함된(중첩된) 문서가 있는 문서 배열이 포함됩니다.

$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"
        ]
}

이 예에서는 다른 정규식을 포함할 수 있는 배열을 만듭니다. 지금은 정규 표현식이 하나만 있습니다.

정규식 배열을 만들어야 하는 이유는 무엇입니까? $nin은 비교할 배열을 사용하기 때문입니다.

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