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

MongoDB에서 쿼리 배열의 크기를 정확하게 계산하는 방법

MongoDB에서 쿼리 결과로 만들어지는 배열의 크기를 정확하게 계산하려면 distinct() 메서드로 고유한 요소만 먼저 추출한 다음, JavaScript의 length 속성을 사용하면 됩니다.

기본 문법

db.yourCollectionName.distinct('yourFieldName').length;

distinct()는 지정한 필드에서 중복을 제거한 고유한 값들의 배열을 반환합니다. 여기에 .length를 붙이면 해당 필드에 서로 다른 값이 몇 개 있는지 한 번에 확인할 수 있습니다.

1단계: 예제 컬렉션 생성

먼저 실습에 사용할 컬렉션과 문서들을 생성해 보겠습니다.

> db.countOrSizeDemo.insertOne({"StudentFirstName":"John"});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5cd304f5b64f4b851c3a13dc")
}
> db.countOrSizeDemo.insertOne({"StudentFirstName":"David"});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5cd304fab64f4b851c3a13dd")
}
> db.countOrSizeDemo.insertOne({"StudentFirstName":"David"});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5cd304fcb64f4b851c3a13de")
}
> db.countOrSizeDemo.insertOne({"StudentFirstName":"Carol"});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5cd30500b64f4b851c3a13df")
}
> db.countOrSizeDemo.insertOne({"StudentFirstName":"Sam"});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5cd30505b64f4b851c3a13e0")
}
> db.countOrSizeDemo.insertOne({"StudentFirstName":"John"});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5cd3050ab64f4b851c3a13e1")
}

위 예제에서는 총 6개의 문서를 삽입했습니다. 이때 "John"과 "David"는 각각 두 번씩 중복되어 저장되었다는 점에 주목하세요.

2단계: 저장된 문서 확인하기

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

> db.countOrSizeDemo.find();

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

{ "_id" : ObjectId("5cd304f5b64f4b851c3a13dc"), "StudentFirstName" : "John" }
{ "_id" : ObjectId("5cd304fab64f4b851c3a13dd"), "StudentFirstName" : "David" }
{ "_id" : ObjectId("5cd304fcb64f4b851c3a13de"), "StudentFirstName" : "David" }
{ "_id" : ObjectId("5cd30500b64f4b851c3a13df"), "StudentFirstName" : "Carol" }
{ "_id" : ObjectId("5cd30505b64f4b851c3a13e0"), "StudentFirstName" : "Sam" }
{ "_id" : ObjectId("5cd3050ab64f4b851c3a13e1"), "StudentFirstName" : "John" }

3단계: 쿼리 배열의 크기 계산하기

이제 distinct() 메서드와 length 속성을 조합하여 StudentFirstName 필드의 고유한 값 개수, 즉 배열의 크기를 구해 보겠습니다.

> db.countOrSizeDemo.distinct('StudentFirstName').length;

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

4

전체 문서는 6개였지만, 중복을 제거한 고유한 학생 이름은 John, David, Carol, Sam으로 총 4개이므로 결과가 4로 출력됩니다.

참고: 단순 문서 수를 세고 싶다면?

중복 제거 없이 조건에 맞는 문서의 개수만 필요하다면 distinct() 대신 countDocuments() 메서드를 사용하는 것이 더 효율적입니다.

db.countOrSizeDemo.countDocuments({});  // 전체 문서 수: 6