Retrieve Data
이 페이지의 내용
개요
찾기 작업을 수행하여 MongoDB 데이터베이스에서 데이터를 검색할 수 있습니다. find()
또는 findOne()
메서드를 호출하여 기준에 따라 문서를 일치시키는 찾기 작업을 수행할 수 있습니다.
팁
인터랙티브 랩
이 페이지에는 find()
메서드를 사용하여 데이터를 조회하는 방법을 보여주는 짧은 인터랙티브 실습이 포함되어 있습니다. MongoDB 또는 코드 편집기를 설치하지 않고도 브라우저 창에서 직접 이 실습을 완료할 수 있습니다.
실습을 시작하려면 페이지 상단의 Open Interactive Tutorial 버튼을 클릭하세요. 실습을 전체 화면 형식으로 확장하려면 실습 창의 오른쪽 상단 모서리에 있는 전체 화면 버튼(⛶)을 클릭합니다.
다음 가이드에 표시된 대로 선택적 매개변수를 지정하거나 다른 메서드를 연결하여 찾기 작업이 반환하는 정보를 추가로 지정할 수도 있습니다:
집계 작업을 사용하여 데이터를 검색할 수도 있습니다. 이 유형의 작업을 사용하면 정렬된 변환 파이프라인을 일치하는 데이터에 적용할 수 있습니다.
데이터베이스에서 기준에 일치하는 수신 데이터를 모니터링하려는 경우 감시 작업을 사용하여 일치하는 데이터가 삽입될 때 실시간으로 알림을 받을 수 있습니다.
참고
쿼리 작업은 일치하는 문서가 포함된 커서에 대한 레퍼런스를 반환할 수 있습니다. 커서에 저장된 데이터를 검사하는 방법을 알아보려면 커서 기본 사항 페이지를 참조하세요.
Node.js 드라이버를 사용하여 다음 환경에서 호스팅되는 배포에 대한 읽기 작업을 연결하고 수행할 수 있습니다.
MongoDB Atlas: 클라우드에서의 MongoDB 배포를 위한 완전 관리형 서비스
MongoDB Enterprise: 구독 기반의 자체 관리형 MongoDB 버전입니다.
MongoDB Community: 소스 사용 가능하고, 무료로 사용할 수 있는 자체 관리형 MongoDB 버전
MongoDB Atlas에서 호스팅되는 배포서버를 위한 Atlas UI에서 읽기 작업을 수행하는 방법에 대한 자세한 내용은 문서 보기, 필터링 및 정렬을 참조하세요.
문서 찾기
Collection
객체에서 find()
메서드를 호출할 수 있습니다. 이 메서드는 조회하려는 문서를 설명하는 쿼리 문서를 허용합니다. 쿼리 문서를 지정하는 방법에 대한 자세한 내용은 쿼리 지정하기 가이드를 참조하세요.
팁
쿼리 기준 없음
쿼리 기준이 없는 찾기 작업을 실행하려면 빈 쿼리를 전달하거나 찾기 메서드 매개 변수에서 쿼리 문서를 생략할 수 있습니다.
다음 작업은 모두 myColl
컬렉션의 모든 문서를 반환합니다:
myColl.find(); // no query myColl.find({}); // empty query
쿼리를 전달하지 않거나 빈 쿼리를 findOne()
메서드에 전달하면 작업은 컬렉션에서 단일 문서를 반환합니다.
빈 쿼리를 전달하는 경우에도 찾기 작업에서 옵션을 지정할 수 있습니다. 예를 들어, 다음 코드는 빈 쿼리 매개변수를 수신한 찾기 작업을 실행하는 동안 프로젝션을 옵션으로 지정하는 방법을 보여줍니다.
const options = { projection: { _id: 0, field1: 1 }, }; const findResult = await myColl.findOne({}, options);
문서 필드 프로젝션에 대한 자세한 내용은 반환할 필더 지정 가이드를 참조하세요.
find()
메소드는 일치하는 문서에 액세스할 수 있는 Cursor
인스턴스를 반환합니다. findOne()
메서드는 Promise
인스턴스를 반환하며, 이 인스턴스를 통해 일치하는 문서에 액세스하거나 일치하는 문서가 없는 경우에는 null
값에 액세스할 수 있습니다.
예시
한 피자 레스토랑에서 Lemony Snicket이 어제 주문한 모든 피자를 찾고자 합니다. 이를 위해 orders
컬렉션에서 find()
쿼리를 수행합니다:
// Search for orders by name and within a specific date range const findResult = orders.find({ name: "Lemony Snicket", date: { $gte: new Date(new Date().setHours(00, 00, 00)), $lt: new Date(new Date().setHours(23, 59, 59)), }, });
작업이 반환되면 findResult
변수가 Cursor
를 레퍼런스로 활용합니다. 아래와 같이 for await...of
구문을 사용하여 검색한 문서를 출력할 수 있습니다:
for await (const doc of findResult) { console.log(doc); }
출력은 다음과 비슷할 수 있습니다.
[ { name: "Lemony Snicket", type: "horseradish pizza", qty: 1, status: "delivered", date: ... }, { name: "Lemony Snicket", type: "coal-fired oven pizza", qty: 3, status: "canceled", date: ...}, ... ]
추가 정보
찾기 작업을 보여주는 실행 가능한 코드 예시는 다음 사용 예시를 참조하세요.
findOne()
및 find()
메서드에 대한 자세한 내용은 다음 서버 매뉴얼 문서를 참조하세요.
문서에서 데이터 집계
사용자 지정 처리 파이프라인을 실행하여 데이터베이스에서 데이터를 조회하려는 경우 aggregate()
메서드를 사용할 수 있습니다. 이 메서드는 실행할 집계 표현식을 순서대로 허용합니다. 이러한 표현식을 사용하면 collection에서 결과 데이터를 필터링, 그룹화 및 정렬할 수 있습니다.
예시
피자 레스토랑에서 지난 주 피자 주문을 요약하는 즉시 상태 보고서를 실행하고자 합니다. orders
컬렉션에서 다음 aggregate()
쿼리를 실행하여 각 고유한 '상태' 필드에 대한 합계를 가져옵니다:
// Group orders by status within the last week const aggregateResult = orders.aggregate([ { $match: { date: { $gte: new Date(new Date().getTime() - 1000 * 3600 * 24 * 7), $lt: new Date(), }, }, }, { $group: { _id: "$status", count: { $sum: 1, }, }, }, ]);
작업이 반환되면 aggregateResult
변수가 Cursor
를 레퍼런스로 활용합니다. 아래와 같이 for await...of
구문을 사용하여 검색한 문서를 출력할 수 있습니다:
for await (const doc of aggregateResult) { console.log(doc); }
출력은 다음과 비슷할 수 있습니다.
[ { _id: 'delivering', count: 5 }, { _id: 'delivered', count: 37 }, { _id: 'created', count: 9 } ]
추가 정보
집계 파이프라인을 구성하는 방법에 대한 자세한 내용은 집계 가이드 또는 서버 매뉴얼의 집계 작업을 참조하세요.
데이터 변경 사항 모니터링
watch()
메서드를 사용하여 특정 조건과 일치하는 컬렉션의 변경 사항이 있는지를 모니터링할 수 있습니다. 변경 사항에는 삽입, 업데이트, 교체, 삭제된 문서가 포함됩니다. 컬렉션에 대한 쓰기 작업이 실행될 때마다 변경된 데이터에 대해 순차적으로 실행되는 집계 명령 파이프라인을 해당 메서드에 전달할 수 있습니다.
예시
피자 레스토랑에서는 새로운 피자 주문이 들어올 때마다 알림을 받고자 합니다. 이를 위해 삽입 작업을 필터링하고 특정 필드를 반환하는 집계 파이프라인을 생성합니다. 아래와 같이 orders
컬렉션에서 호출된 watch()
메서드에 이 파이프라인을 전달합니다.
const changeStream = orders.watch([ { $match: { operationType: "insert" } }, { $project: { "fullDocument.name": 1, "fullDocument.address": 1, }, }, ]); changeStream.on("change", change => { const { name, address } = change.fullDocument; console.log(`New order for ${name} at ${address}.`); });
추가 정보
watch()
메서드의 실행 가능한 예는 변경 사항에 대한 주시 사용 예를 참조하세요.