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

SQL처럼 MongoDB에서 레코드 존재 여부 확인하기: findOne() 올바른 사용법

SQL에서는 EXISTS 절을 사용해 레코드의 존재 여부를 확인하지만, MongoDB에는 이에 해당하는 전용 연산자가 없습니다. 대신 findOne() 메서드를 활용하면 동일한 목적을 달성할 수 있습니다. 이 글에서는 실제 예제를 통해 그 사용법을 살펴보겠습니다.

테스트용 컬렉션 생성하기

먼저 문서가 담긴 컬렉션을 생성합니다. 아래 예제에서는 학생 정보를 저장하는 existsAlternateDemo 컬렉션을 만들어 보겠습니다.

> db.existsAlternateDemo.insertOne({"StudentName":"Chris"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e06d23f9e4dae213890ac5c")
}
> db.existsAlternateDemo.insertOne({"StudentName":"Chris","StudentAge":21});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e06d2559e4dae213890ac5d")
}
> db.existsAlternateDemo.insertOne({"StudentName":"Chris","StudentAge":22,"StudentCountryName":"US"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e06d2689e4dae213890ac5e")
}

세 개의 문서는 각각 서로 다른 필드 구조를 가지고 있습니다. 첫 번째 문서는 이름만, 두 번째 문서는 이름과 나이, 세 번째 문서는 이름·나이·국가 정보를 모두 포함하고 있습니다.

저장된 문서 전체 조회하기

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

> db.existsAlternateDemo.find();

위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.

{ "_id" : ObjectId("5e06d23f9e4dae213890ac5c"), "StudentName" : "Chris" }
{ "_id" : ObjectId("5e06d2559e4dae213890ac5d"), "StudentName" : "Chris", "StudentAge" : 21 }
{ "_id" : ObjectId("5e06d2689e4dae213890ac5e"), "StudentName" : "Chris", "StudentAge" : 22, "StudentCountryName" : "US" }

findOne()으로 레코드 존재 여부 확인하기

SQL의 EXISTS처럼 특정 조건을 만족하는 레코드가 존재하는지 확인하려면 findOne() 메서드를 사용합니다. 이 메서드는 조건에 일치하는 첫 번째 문서 하나만 반환하며, 일치하는 문서가 없으면 null을 반환하기 때문에 존재 여부 판단에 매우 유용합니다.

> db.existsAlternateDemo.findOne({"StudentCountryName" : "US"});

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

{
   "_id" : ObjectId("5e06d2689e4dae213890ac5e"),
   "StudentName" : "Chris",
   "StudentAge" : 22,
   "StudentCountryName" : "US"
}

참고: $exists 연산자와의 차이점

MongoDB에는 필드 자체의 존재 여부를 확인하는 $exists 연산자도 있습니다. 다만 $exists는 문서 내 특정 필드의 유무를 검사하는 것이고, 위에서 소개한 findOne() 방식은 SQL의 EXISTS처럼 조건에 맞는 레코드의 존재 여부를 확인하는 용도라는 점에서 차이가 있습니다. 상황에 맞게 두 방법을 적절히 활용하시기 바랍니다.