문서 메뉴
문서 홈
/ / /
Node.js 드라이버
/ / /

데이터 조회

이 페이지의 내용

  • 개요
  • 문서 찾기
  • 문서에서 데이터 집계
  • 데이터 변경 사항 모니터링

찾기 작업을 수행하여 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() 메서드에 이 파이프라인을 전달합니다.

// Set up a change stream to listen for new order insertions
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() 메서드의 실행 가능한 예는 변경 사항에 대한 주시 사용 예를 참조하세요.

← 읽기 작업