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가 반환되므로, 애플리케이션 로직에서 데이터 존재 여부를 판단할 때 유용하게 활용할 수 있습니다.