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

MongoDB에서 문서 존재 여부를 확인하고 true/false를 반환하는 방법

MongoDB에서 특정 조건에 맞는 문서가 컬렉션 안에 실제로 존재하는지 확인해야 하는 경우가 자주 있습니다. 이때 find() 메서드와 count() 메서드를 함께 사용하면 문서의 존재 여부에 따라 true 또는 false를 간단하게 반환받을 수 있습니다.

이 글에서는 예제 컬렉션을 만들고, 문서가 존재할 때와 존재하지 않을 때 각각 어떤 결과가 나오는지 단계별로 살펴보겠습니다.

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

먼저 예제에 사용할 컬렉션을 생성하겠습니다. 다음은 documentExistsOrNotDemo라는 이름의 컬렉션에 문서를 삽입하는 쿼리입니다.

> db.documentExistsOrNotDemo.insertOne({"UserId":101,"UserName":"John"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c9932bd330fd0aa0d2fe4cf")
}
> db.documentExistsOrNotDemo.insertOne({"UserId":102,"UserName":"Chris"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c9932c6330fd0aa0d2fe4d0")
}
> db.documentExistsOrNotDemo.insertOne({"UserId":102,"UserName":"Robert"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c9932ce330fd0aa0d2fe4d1")
}

세 개의 문서가 모두 성공적으로 삽입되었습니다. 이제 find() 메서드를 사용해 컬렉션에 저장된 모든 문서를 조회해 보겠습니다.

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

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

{
   "_id" : ObjectId("5c9932bd330fd0aa0d2fe4cf"),
   "UserId" : 101,
   "UserName" : "John"
}
{
   "_id" : ObjectId("5c9932c6330fd0aa0d2fe4d0"),
   "UserId" : 102,
   "UserName" : "Chris"
}
{
   "_id" : ObjectId("5c9932ce330fd0aa0d2fe4d1"),
   "UserId" : 102,
   "UserName" : "Robert"
}

2. 문서 존재 여부 확인하기

문서의 존재 여부를 확인하는 핵심 원리는 간단합니다. 조건에 맞는 문서를 검색한 뒤 결과 개수(count())가 0보다 큰지 비교하면 됩니다. 개수가 1개 이상이면 true, 0개면 false가 반환됩니다.

Case 1: 문서가 존재하는 경우 — true 반환

다음은 UserId가 101인 문서가 존재하는지 확인하는 쿼리입니다.

> db.documentExistsOrNotDemo.find({"UserId":101}).count() > 0;

UserId가 101인 문서가 실제로 존재하므로 아래와 같이 true가 출력됩니다.

True

Case 2: 문서가 존재하지 않는 경우 — false 반환

반대로, 존재하지 않는 값으로 조건을 지정하면 어떻게 될까요? 다음은 UserId가 110인 문서를 검색하는 쿼리입니다.

> db.documentExistsOrNotDemo.find({"UserId":110}).count() > 0;

UserId가 110인 문서는 컬렉션에 없으므로 결과 개수가 0이 되어 false가 반환됩니다.

False

정리

MongoDB에서 문서의 존재 여부를 확인하는 가장 간단한 방법은 find(조건).count() > 0 형태의 쿼리를 사용하는 것입니다. 조건에 일치하는 문서가 하나라도 있으면 true, 없으면 false가 반환되므로, 애플리케이션 로직에서 데이터 존재 여부를 판단할 때 유용하게 활용할 수 있습니다.