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

MongoDB에서 배열이 비어 있는지 확인하는 방법 ($size 연산자 활용)

MongoDB에서 배열(목록) 필드가 비어 있지 않은 문서만 조회하고 싶다면 $size 연산자와 $not 연산자를 함께 사용하면 됩니다. 이 글에서는 실제 예제를 통해 빈 배열을 제외한 문서를 조회하는 방법을 단계별로 살펴보겠습니다.

1. 샘플 컬렉션 생성하기

먼저 테스트에 사용할 컬렉션을 만들고 다양한 형태의 배열 값을 가진 문서들을 삽입합니다. 요소가 2개인 배열, 요소가 1개인 배열, 완전히 비어 있는 배열([]), 그리고 null 값 하나만 담긴 배열까지 포함했습니다.

> db.checkIfListIsNotEmptyDemo.insertOne({"UserFriendGroup":["John","David"]});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5cdd99e8bf3115999ed511f7")
}
> db.checkIfListIsNotEmptyDemo.insertOne({"UserFriendGroup":["Carol"]});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5cdd99e9bf3115999ed511f8")
}
> db.checkIfListIsNotEmptyDemo.insertOne({"UserFriendGroup":[]});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5cdd99ebbf3115999ed511f9")
}
> db.checkIfListIsNotEmptyDemo.insertOne({"UserFriendGroup":[null]});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5cdd99f2bf3115999ed511fa")
}
> db.checkIfListIsNotEmptyDemo.insertOne({"UserFriendGroup":[]});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5cdd99f6bf3115999ed511fb")
}

2. 전체 문서 조회하기

find() 메서드에 pretty()를 붙여 컬렉션의 모든 문서를 확인해 보겠습니다.

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

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

{
    "_id" : ObjectId("5cdd99e8bf3115999ed511f7"),
    "UserFriendGroup" : [
        "John",
        "David"
    ]
}
{
    "_id" : ObjectId("5cdd99e9bf3115999ed511f8"),
    "UserFriendGroup" : [
        "Carol"
    ]
}
{ "_id" : ObjectId("5cdd99ebbf3115999ed511f9"), "UserFriendGroup" : [ ] }
{
    "_id" : ObjectId("5cdd99f2bf3115999ed511fa"),
    "UserFriendGroup" : [
        null
    ]
}
{ "_id" : ObjectId("5cdd99f6bf3115999ed511fb"), "UserFriendGroup" : [ ] }

3. 빈 배열이 아닌 문서만 조회하기

배열이 비어 있지 않은지 확인하려면 $size: 0(크기가 0인 배열) 조건에 $not을 적용하여 그 반대 경우, 즉 크기가 0이 아닌 배열을 가진 문서를 조회합니다.

> db.checkIfListIsNotEmptyDemo.find({'UserFriendGroup': {'$not': {'$size': 0}}});

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

{ "_id" : ObjectId("5cdd99e8bf3115999ed511f7"), "UserFriendGroup" : [ "John", "David" ] }
{ "_id" : ObjectId("5cdd99e9bf3115999ed511f8"), "UserFriendGroup" : [ "Carol" ] }
{ "_id" : ObjectId("5cdd99f2bf3115999ed511fa"), "UserFriendGroup" : [ null ] }

결과 분석 및 참고 사항

출력 결과를 보면 UserFriendGroup 배열이 비어 있던 두 개의 문서는 결과에서 제외되었고, 실제 요소를 가진 세 개의 문서만 반환된 것을 확인할 수 있습니다. 주목할 점은 [null]처럼 null 값 하나만 들어 있는 배열도 '비어 있지 않은' 것으로 간주된다는 점입니다. $size 연산자는 배열의 요소 개수를 기준으로 판단하기 때문입니다.

참고로 $size 연산자는 숫자 값만 받으며, 범위 조건(예: $gt)과 직접 조합할 수 없습니다. 따라서 '요소가 1개 이상인 배열'을 찾으려면 위 예제처럼 {'$not': {'$size': 0}} 형태로 작성하는 것이 가장 일반적이고 안전한 방법입니다.