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

MongoDB에서 컬렉션의 문서 6개 중 무작위로 2개를 조회하는 방법

MongoDB에서 컬렉션에 저장된 여러 문서 중 일부를 무작위로 추출해야 하는 경우가 종종 있습니다. 이럴 때 aggregate() 메서드의 $sample 스테이지를 사용하면 간단하게 해결할 수 있습니다. 이번 글에서는 실제 예제를 통해 컬렉션의 6개 문서 중에서 임의의 두 문서를 가져오는 과정을 단계별로 살펴보겠습니다.

1. 컬렉션 생성 및 문서 삽입하기

먼저 테스트용 컬렉션을 생성하고 insertOne() 메서드로 여러 개의 문서를 추가합니다. 아래 예제에서는 StudentId 필드를 가진 6개의 문서를 순차적으로 삽입했습니다.

> db.twoRandomDocumentDemo.insertOne({"StudentId":10});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c9ec9aad628fa4220163b87")
}
> db.twoRandomDocumentDemo.insertOne({"StudentId":100});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c9ec9add628fa4220163b88")
}
> db.twoRandomDocumentDemo.insertOne({"StudentId":45});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c9ec9b0d628fa4220163b89")
}
> db.twoRandomDocumentDemo.insertOne({"StudentId":55});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c9ec9b3d628fa4220163b8a")
}
> db.twoRandomDocumentDemo.insertOne({"StudentId":5});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c9ec9b7d628fa4220163b8b")
}
> db.twoRandomDocumentDemo.insertOne({"StudentId":7});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c9ec9bad628fa4220163b8c")
}

2. find()로 전체 문서 확인하기

데이터가 정상적으로 저장되었는지 확인하기 위해 find() 메서드를 사용하여 컬렉션의 모든 문서를 조회해 보겠습니다.

> db.twoRandomDocumentDemo.find();

쿼리를 실행하면 다음과 같이 총 6개의 문서가 출력됩니다.

{ "_id" : ObjectId("5c9ec9aad628fa4220163b87"), "StudentId" : 10 }
{ "_id" : ObjectId("5c9ec9add628fa4220163b88"), "StudentId" : 100 }
{ "_id" : ObjectId("5c9ec9b0d628fa4220163b89"), "StudentId" : 45 }
{ "_id" : ObjectId("5c9ec9b3d628fa4220163b8a"), "StudentId" : 55 }
{ "_id" : ObjectId("5c9ec9b7d628fa4220163b8b"), "StudentId" : 5 }
{ "_id" : ObjectId("5c9ec9bad628fa4220163b8c"), "StudentId" : 7 }

3. $sample 스테이지로 무작위 문서 2개 추출하기

이제 핵심 단계입니다. aggregate() 파이프라인에 $sample 스테이지를 사용하면 컬렉션에서 지정한 개수만큼의 문서를 무작위로 선택할 수 있습니다. 우리는 6개의 문서 중 딱 2개만 필요하므로 size 옵션을 2로 설정합니다.

> db.twoRandomDocumentDemo.aggregate([{$sample: {size: 2}}]);

실행 결과는 다음과 같습니다. 매번 실행할 때마다 어떤 문서가 선택될지는 랜덤하게 결정됩니다.

{ "_id" : ObjectId("5c9ec9b3d628fa4220163b8a"), "StudentId" : 55 }
{ "_id" : ObjectId("5c9ec9aad628fa4220163b87"), "StudentId" : 10 }

4. 쿼리 재실행 시 결과 비교

$sample 스테이지는 실행할 때마다 새로운 무작위 추출을 수행합니다. 동일한 쿼리를 한 번 더 실행하면 앞선 결과와는 다른 문서 조합이 반환되는 것을 확인할 수 있습니다.

> db.twoRandomDocumentDemo.aggregate([{$sample: {size: 2}}]);

두 번째 실행 결과입니다. 이번에는 StudentId가 100과 5인 문서가 선택되었습니다.

{ "_id" : ObjectId("5c9ec9add628fa4220163b88"), "StudentId" : 100 }
{ "_id" : ObjectId("5c9ec9b7d628fa4220163b8b"), "StudentId" : 5 }

마무리

이처럼 MongoDB에서 무작위 문서를 추출하는 가장 간단하고 권장되는 방법은 $sample 집계 스테이지를 활용하는 것입니다. size 값만 변경하면 원하는 개수만큼의 문서를 손쉽게 가져올 수 있으며, 별도의 복잡한 로직 없이도 매번 다른 랜덤 결과를 얻을 수 있다는 점이 큰 장점입니다.