Computer >> 컴퓨터 >  >> 프로그래밍 >> MongoDB

MongoDB에서 $nor 연산자로 특정 문서를 제외하고 조회하는 방법

MongoDB에서 특정 문서 하나만 제외한 나머지 문서들을 조회하려면 $nor 연산자를 활용하면 됩니다. $nor는 지정한 조건 중 어느 하나라도 일치하는 문서를 모두 배제하고, 그 외의 문서만 반환하는 논리 연산자입니다.

1. 테스트용 컬렉션 생성하기

먼저 예제에 사용할 컬렉션을 만들고 문서를 삽입해 보겠습니다.

> db.demo100.insertOne({"Name":"Chris","Age":21});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e2d9624b8903cdd865577c0")
}
> db.demo100.insertOne({"Name":"David","Age":23});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e2d962cb8903cdd865577c1")
}
> db.demo100.insertOne({"Name":"Bob","Age":19});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e2d9634b8903cdd865577c2")
}

위 명령을 실행하면 'Chris(21세)', 'David(23세)', 'Bob(19세)' 세 개의 문서가 demo100 컬렉션에 저장됩니다.

2. 전체 문서 확인하기

find() 메서드를 사용하면 컬렉션에 저장된 모든 문서를 확인할 수 있습니다.

> db.demo100.find();

실행 결과는 다음과 같습니다.

{ "_id" : ObjectId("5e2d9624b8903cdd865577c0"), "Name" : "Chris", "Age" : 21 }
{ "_id" : ObjectId("5e2d962cb8903cdd865577c1"), "Name" : "David", "Age" : 23 }
{ "_id" : ObjectId("5e2d9634b8903cdd865577c2"), "Name" : "Bob", "Age" : 19 }

3. $nor 쿼리로 특정 문서 제외하기

이제 Name이 'Chris'이면서 Age가 21인 문서를 제외하고 싶다면, 아래와 같이 $nor 배열 안에 해당 조건들을 넣어주면 됩니다. 여기서 $exists: false 조건은 해당 필드가 아예 없는 문서도 함께 배제하여, 필드가 누락된 문서가 결과에 포함되지 않도록 하는 역할을 합니다.

> db.demo100.find({ $nor: [ { Name:"Chris" }, { Name: { $exists: false } }, { Age: 21 }, { Age: { $exists: false } } ] } );

쿼리 실행 결과는 다음과 같습니다.

{ "_id" : ObjectId("5e2d962cb8903cdd865577c1"), "Name" : "David", "Age" : 23 }
{ "_id" : ObjectId("5e2d9634b8903cdd865577c2"), "Name" : "Bob", "Age" : 19 }

정리

$nor 연산자를 사용하면 여러 조건을 동시에 부정할 수 있어, 특정 조건에 해당하는 문서를 손쉽게 제외한 결과를 얻을 수 있습니다. 이처럼 MongoDB에서는 $nor와 $exists를 조합하여 원하지 않는 문서나 필드가 누락된 문서까지 정확하게 걸러낼 수 있습니다.