MongoDB Atlas에서 데이터 읽기 - 함수
이 페이지의 내용
이 페이지의 예제는 Atlas Function 에서 MongoDB 쿼리 API 를 사용하여 Atlas cluster 에서 문서를 읽는 방법을 보여줍니다.
데이터를 쿼리 하기 위해 호출할 수 있는 메서드 , 표현식 일치 필터를 쓰기 (write) 수 있는 연산자 , 일반적인 사용 사례를 처리하다 하기 위해 이들을 결합하는 몇 가지 패턴 에 대해 알아보세요.
데이터 모델
이 페이지의 예에서는 온라인 스토어에서 구매할 수 있는 다양한 품목을 모델링한 store.items
컬렉션을 사용합니다. 각 항목에는 name
, 재고 quantity
및 고객 reviews
의 배열이 있습니다.
{ "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 ... }
쿼리 메서드
단일 문서 찾기(findOne()
)
collection.findOne()
메서드를 사용하여 단일 문서를 찾을 수 있습니다.
다음 함수 스니펫은 items
컬렉션에서 quantity
가 25
보다 크거나 같은 단일 문서를 찾습니다:
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}`));
하나 이상의 문서 찾기(find()
)
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}`))
컬렉션의 문서 수 계산(count()
)
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로 찾기
컬렉션을 쿼리하여 지정된 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
배열 내 요소의 모든 조합이 내장된 표현식의 두 조건을 모두 충족하는 문서와 일치합니다. 지정된 username
및 comment
값이 동일한 문서에 있을 필요는 없습니다.
{ "reviews": { "username": "JoeMango", "comment": "This is a great product!" } }
예시
다음 쿼리는 내장된 표현식의 두 조건이 모두 reviews
배열의 단일 요소로 충족되는 문서와 일치합니다. 지정된 username
및 comment
는 동일한 문서에 있어야 합니다:
{ "reviews": { "$elemMatch": { "username": "JoeMango", "comment": "This is a great product!" } } }
쿼리 연산자
Compare Values
비교 연산자 를 사용하여 문서 필드의 값을 다른 값과 비교할 수 있습니다.
{ "<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") } }