Docs Menu
Docs Home
/
MongoDB Atlas
/ / /

MongoDB Atlas에서 데이터 읽기 - 함수

이 페이지의 내용

  • 데이터 모델
  • 스니펫 설정
  • 쿼리 메서드
  • 단일 문서 찾기(findOne())
  • 하나 이상의 문서 찾기(find())
  • 컬렉션의 문서 수(count())
  • 쿼리 패턴
  • 문서 ID로 찾기
  • 날짜별로 찾기
  • 루트 수준 필드 일치
  • 여러 필드 일치
  • 내장된 문서 필드 일치
  • 값 배열 일치
  • 배열 요소 일치
  • 쿼리 연산자
  • Compare Values
  • 논리 표현식 평가하기
  • 정규 표현식 평가하기

이 페이지의 예제는 Atlas Function 에서 MongoDB 쿼리 API 를 사용하여 Atlas cluster 에서 문서를 읽는 방법을 보여줍니다.

데이터를 쿼리 하기 위해 호출할 수 있는 메서드 , 표현식 일치 필터를 쓰기 (write) 수 있는 연산자 , 일반적인 사용 사례를 처리하다 하기 위해 이들을 결합하는 몇 가지 패턴 에 대해 알아보세요.

이 페이지의 예에서는 온라인 스토어에서 구매할 수 있는 다양한 품목을 모델링한 store.items 컬렉션을 사용합니다. 각 항목에는 name, 재고 quantity 및 고객 reviews의 배열이 있습니다.

store.items의 JSON schema
{
"title": "Item",
"required": ["_id", "name", "quantity", "reviews"],
"properties": {
"_id": { "bsonType": "objectId" },
"name": { "bsonType": "string" },
"quantity": { "bsonType": "int" },
"reviews": {
"bsonType": "array",
"items": {
"bsonType": "object",
"required": ["username", "comment"],
"properties": {
"username": { "bsonType": "string" },
"comment": { "bsonType": "string" }
}
}
}
}
}

함수 에서 코드 스니펫을 사용하려면 먼저 MongoDB 컬렉션 처리하다 을 인스턴스화해야 합니다.

exports = function() {
const mongodb = context.services.get("mongodb-atlas");
const itemsCollection = mongodb.db("store").collection("items");
const purchasesCollection = mongodb.db("store").collection("purchases");
// ... paste snippet here ...
}

collection.findOne() 메서드를 사용하여 단일 문서를 찾을 수 있습니다.

다음 함수 스니펫은 items 컬렉션에서 quantity25보다 크거나 같은 단일 문서를 찾습니다:

const query = { "quantity": { "$gte": 25 } };
const projection = {
"title": 1,
"quantity": 1,
}
return itemsCollection.findOne(query, projection)
.then(result => {
if(result) {
console.log(`Successfully found document: ${result}.`);
} else {
console.log("No document matches the provided query.");
}
return result;
})
.catch(err => console.error(`Failed to find document: ${err}`));

collection.find() 메서드를 사용하여 여러 문서를 찾을 수 있습니다.

다음 함수 스니펫은 items 컬렉션에서 리뷰가 하나 이상 있는 모든 문서를 찾아 _id 필드를 생략하고 name을 기준으로 정렬하여 반환합니다.

const query = { "reviews.0": { "$exists": true } };
const projection = { "_id": 0 };
return itemsCollection.find(query, projection)
.sort({ name: 1 })
.toArray()
.then(items => {
console.log(`Successfully found ${items.length} documents.`)
items.forEach(console.log)
return items
})
.catch(err => console.error(`Failed to find documents: ${err}`))

collection.count() 메서드를 사용하여 컬렉션의 문서 개수를 집계할 수 있습니다. 쿼리를 지정하여 집계할 문서를 제어할 수 있습니다. 쿼리를 지정하지 않으면 메서드는 컬렉션의 모든 문서 수를 집계합니다.

다음 함수 스니펫은 items 컬렉션에서 리뷰가 하나 이상 있는 문서 수를 집계합니다:

return itemsCollection.count({ "reviews.0": { "$exists": true } })
.then(numDocs => console.log(`${numDocs} items have a review.`))
.catch(err => console.error("Failed to count documents: ", err))

컬렉션을 쿼리하여 지정된 ID가 있는 문서를 찾을 수 있습니다. MongoDB는 자동으로 각 문서의 ID를 문서의 _id 필드에 ObjectId 값으로 저장합니다.

{ "_id": <ObjectId> }

예시

다음 쿼리는 _id 값이 5ad84b81b8b998278f773c1b인 컬렉션의 문서와 일치합니다.

{ "_id": BSON.ObjectId("5ad84b81b8b998278f773c1b") }

컬렉션을 쿼리하여 특정 날짜 값이 있는 필드가 있는 문서를 찾거나 날짜 범위 내의 문서를 쿼리할 수 있습니다.

{ "<Date Field Name>": <Date | Expression> }

예시

다음 쿼리는 createdAt 날짜가 2019년 1월 23일인 컬렉션의 문서와 일치합니다.

{ "createdAt": new Date("2019-01-23T05:00:00.000Z") }

예시

다음 쿼리는 createdAt 날짜가 2019년 내 범위에 있는 컬렉션의 문서와 일치합니다.

{
"createdAt": {
"$gte": new Date("2019-01-01T00:00:00.000Z"),
"$lt": new Date("2020-01-01T00:00:00.000Z"),
}
}

각 문서의 루트 수준 필드 값을 기반으로 컬렉션을 쿼리할 수 있습니다. MongoDB가 각 문서에 대해 평가하는 특정 값이나 중첩 표현식을 지정할 수 있습니다.

자세한 내용은 MongoDB 서버 매뉴얼의 쿼리 문서 튜토리얼을 참조하세요.

{ "<Field Name>": <Value | Expression> }

예시

다음 쿼리는 name 필드의 값이 Basketball인 문서와 일치합니다.

{ "name": "Basketball" }

단일 쿼리 문서에서 여러 쿼리 조건을 지정할 수 있습니다. 쿼리 문서의 각 루트 수준 필드는 컬렉션의 필드에 매핑됩니다. MongoDB는 모든 쿼리 조건을 충족하는 문서만 반환합니다.

자세한 내용은 MongoDB 서버 매뉴얼의 내장된/중첩된 문서에 대한 쿼리 튜토리얼을 참조하세요.

{
"<Field Name 1>": <Value | Expression>,
"<Field Name 2>": <Value | Expression>
}

예시

다음 쿼리는 name 필드의 값이 Basketball이고 quantity 값이 0보다 큰 문서와 일치합니다.

{
"name": "Basketball",
"quantity": { "$gt": 0 }
}

내장된 문서 필드의 값을 기반으로 컬렉션 을 쿼리 할 수 있습니다. 내장된 문서 필드 를 지정하려면 여러 개의 중첩된 쿼리 표현식 또는 표준 문서 점 표기법 을 사용합니다.

자세한 내용은 MongoDB 서버 매뉴얼의 내장된/중첩된 문서에 대한 쿼리 튜토리얼을 참조하세요.

중첩된 쿼리 표현식
{ "<Field Name>": { "<Nested Field Name>": <Value | Expression> } }
점 표기법
{ "<Field Name>.<Nested Field Name>": <Value | Expression> }

예시

다음 쿼리는 reviews 배열의 첫 번째 리뷰를 남긴 사람의 사용자 이름이 JoeMango인 문서를 일치합니다:

{
"reviews.0.username": "JoeMango"
}

배열 필드에 포함된 모든 요소를 기준으로 컬렉션을 쿼리할 수 있습니다.

특정 값 배열에 대한 배열 필드를 쿼리하면 MongoDB는 배열 필드가 지정된 값 배열 과 정확히 일치 하는 문서를 반환합니다. MongoDB 배열 필드에 지정된 값 배열의 모든 요소가 포함 된 문서를 반환하려면 $all 를 사용하세요.

자세한 내용은 MongoDB 서버 매뉴얼의 배열 쿼리 튜토리얼을 참조하세요.

{ "<Array Field Name>": [<Value>, ...] }

예시

다음 쿼리는 reviews 배열에 지정된 문서와 일치하는 요소가 정확히 하나인 문서를 일치합니다.

{
"reviews": [{ username: "JoeMango", comment: "This rocks!" }]
}

예시

다음 쿼리 는 reviews 배열 에 지정된 모든 문서와 일치하는 요소가 하나 이상 포함된 문서와 일치합니다.

{
"reviews": {
"$all": [{ username: "JoeMango", comment: "This rocks!" }]
}
}

배열 필드에 있는 하나 이상의 요소 값을 기반으로 컬렉션을 쿼리할 수 있습니다.

여러 조건이 있는 쿼리 표현식 을 사용하여 배열 필드 를 쿼리 하는 경우 MongoDB 는 배열 요소의 모든 조합 이 표현식 을 충족하는 문서를 반환합니다. MongoDB 가 단일 배열 요소가 모든 표현식 조건을 충족하는 문서를 반환하도록 하려면 $elemMatch 연산자 를 사용하세요.

자세한 내용은 MongoDB 서버 매뉴얼의 배열 쿼리 튜토리얼을 참조하세요.

{ "<Array Field Name>": <Value | Expression> }

예시

다음 쿼리는 reviews 배열 내 요소의 모든 조합이 내장된 표현식의 두 조건을 모두 충족하는 문서와 일치합니다. 지정된 usernamecomment 값이 동일한 문서에 있을 필요는 없습니다.

{
"reviews": {
"username": "JoeMango",
"comment": "This is a great product!"
}
}

예시

다음 쿼리는 내장된 표현식의 두 조건이 모두 reviews 배열의 단일 요소로 충족되는 문서와 일치합니다. 지정된 usernamecomment는 동일한 문서에 있어야 합니다:

{
"reviews": {
"$elemMatch": {
"username": "JoeMango",
"comment": "This is a great product!"
}
}
}

비교 연산자 를 사용하여 문서 필드의 값을 다른 값과 비교할 수 있습니다.

{ "<Field Name>": { "<Comparison Operator>": <Comparison Value> } }

다음과 같은 비교 연산자를 사용할 수 있습니다:

비교 연산자
설명
필드 값이 지정된 값과 같은 문서를 일치합니다.
필드 값이 지정된 값과 같지 않은 문서를 일치합니다.
필드 값이 지정된 값보다 큰 문서를 일치합니다.
필드 값이 지정된 값보다 크거나 같은 문서를 일치합니다.
필드 값이 지정된 값보다 작은 문서를 일치합니다.
필드 값이 지정된 값보다 작거나 같은 문서를 일치합니다.
필드 값이 지정된 값 배열에 포함된 문서를 일치합니다.
필드 값이 지정된 값 배열에 포함되지 않은 문서를 일치합니다.

예시

다음 쿼리는 quantity가 0보다 크고 10보다 작거나 같은 문서를 일치합니다.

{
"quantity": { "$gt": 0, "$lte": 10 }
}

논리 연산자 를 사용하여 단일 필드에 대한 여러 표현식을 평가할 수 있습니다.

{
"<Field Name>": {
"<Logical Operator>": [<Expression>, ...]
}
}

다음과 같은 논리 연산자를 사용할 수 있습니다:

논리 연산자
설명
필드 값이 지정된 모든 표현식과 일치하는 문서를 일치합니다.
필드 값이 지정된 표현식 중 하나 이상과 일치하는 문서를 일치합니다.
필드 값이 지정된 표현식과 일치하지 않는 문서를 일치합니다.
지정된 논리 표현식의 부울 결과를 반전시킵니다.

예시

다음 쿼리는 quantity가 0보다 크거나 reviews 배열에 문서가 5개 이하인 문서와 일치합니다.

{
"$or": [
{ "quantity": { "$gt": 0 } },
{ "reviews": { "$size": { "$lte": 5 } } }
]
}

$regex 쿼리 연산자 를 사용하여 정규 표현식 와 일치하는 필드가 있는 문서를 반환할 수 있습니다. $regex EJSON 유형의 모호성을 피하려면 atlas BSON.BSONRegExp 객체 를 사용해야 합니다.

{
"<Field Name>": {
"$regex": BSON.BSONRegExp(<RegEx String>, <RegEx Options>)
}
}

예시

다음 쿼리는 name 값에 하위 문자열 ball(대소문자 구분 안 함)이 포함된 문서와 일치합니다.

{
"name": { "$regex": BSON.BSONRegExp(".+ball", "i") }
}

돌아가기

자바스크립트 지원