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

MongoDB에서 인덱스를 이용해 결과 배열의 단일 요소 가져오는 방법

MongoDB에서 결과 목록 중 특정 인덱스에 해당하는 요소 하나만 가져오려면 집계 파이프라인(aggregation)$limit을 사용하면 됩니다. 여기에 $skip을 함께 활용하면 지정한 개수만큼 문서를 건너뛴 뒤 원하는 위치의 문서 한 개만 정확하게 조회할 수 있습니다.

1. 샘플 컬렉션 생성하기

먼저 insertOne() 메서드를 이용해 문서 3개를 포함하는 컬렉션을 만들어 보겠습니다.

> db.demo391.insertOne(
...     { "_id" : 101, "Name" : "Chris", Values: ["101", "102"] }
... )
{ "acknowledged" : true, "insertedId" : 101 }
> db.demo391.insertOne(
...     { "_id" : 111, "Name" : "Chris", Values: ["101", "102"] }
... )
{ "acknowledged" : true, "insertedId" : 111 }
> db.demo391.insertOne(
...     { "_id" : 121, "Name" : "Chris", Values: ["101", "102"] }
... )
{ "acknowledged" : true, "insertedId" : 121 }

2. 저장된 전체 문서 확인하기

find() 메서드를 사용하면 컬렉션에 들어 있는 모든 문서를 확인할 수 있습니다.

> db.demo391.find();

위 명령을 실행하면 다음과 같은 결과가 출력됩니다.

{ "_id" : 101, "Name" : "Chris", "Values" : [ "101", "102" ] }
{ "_id" : 111, "Name" : "Chris", "Values" : [ "101", "102" ] }
{ "_id" : 121, "Name" : "Chris", "Values" : [ "101", "102" ] }

3. 인덱스를 기준으로 단일 요소 조회하기

다음은 인덱스 값을 기준으로 결과에서 해당 순번의 문서 하나만 가져오는 쿼리입니다. 변수 i에 원하는 위치(순번)를 저장한 뒤, $match로 조건에 맞는 문서를 필터링하고, $skip으로 i-1개의 문서를 건너뛴 후 마지막에 $limit으로 1개만 선택합니다.

> var i=2;
> db.demo391.aggregate([
...     { $match : {"Name": "Chris"}},
...     { $skip : i-1},
...     { $limit : 1 }
... ]);

쿼리를 실행하면 앞의 1개 문서를 건너뛴 두 번째 문서만 반환되는 것을 확인할 수 있습니다.

{ "_id" : 111, "Name" : "Chris", "Values" : [ "101", "102" ] }

이처럼 $match$skip$limit 순서로 집계 파이프라인을 구성하면, 배열 형태의 결과에서 원하는 인덱스 위치의 요소 하나를 간단하고 효율적으로 추출할 수 있습니다.