db.collection.findOne()
드라이버가 포함된 MongoDB
이 페이지에서는 mongosh
메서드를 설명합니다. MongoDB 드라이버에서 해당 메서드를 보려면 프로그래밍 언어의 해당 페이지를 참조하세요.
정의
db.collection.findOne(query, projection, options)
컬렉션 또는 뷰에 지정된 쿼리 기준을 충족하는 문서 한 개를 반환합니다.
반환되는 문서 는 쿼리 기준과 일치하는 문서 수 및 사용된 쿼리 계획 에 따라 달라질 수 있습니다.
일치하는 문서 수쿼리 계획결과0Any이 메서드는 다음을 반환합니다.null
1Any이 메서드는 지정된 쿼리 기준을 충족하는 문서 를 반환합니다.2 이상컬렉션 스캔이 메서드는 기본 기본 순서 에 따라 첫 번째 문서 를 반환합니다. 고정 사이즈 컬렉션 에서 기본 순서 는 삽입 순서와 동일합니다.2 이상인덱스 스캔이 메서드는 인덱스 에서 검색된 첫 번째 문서 를 반환합니다.중요
다른 인덱스 를 사용하도록 쿼리 계획 이 변경되면 메서드는 다른 문서 를 반환할 수 있습니다. 사용 사례 에서 특정 기록 를 일관되게 선택해야 하는 경우
options
문서 를 사용하여 정렬을 지정해야 합니다.options
문서 에서findOne()
를 사용하는 방법에 대한 자세한 내용은 예시 를 참조하세요.projection
매개 변수를 지정하는 경우findOne()
은projection
필드만 포함하는 문서를 반환합니다._id
필드는 명시적으로 제외하지 않는 한 항상 포함됩니다.
호환성
다음 환경에서 호스팅되는 배포에 db.collection.findOne()
사용할 수 있습니다.
MongoDB Atlas: 클라우드에서의 MongoDB 배포를 위한 완전 관리형 서비스
MongoDB Enterprise: MongoDB의 구독 기반 자체 관리 버전
MongoDB Community: MongoDB의 소스 사용 가능 무료 자체 관리 버전
구문
findOne()
메서드의 형식은 다음과 같습니다.
db.collection.findOne( <query>, <projection>, <options> )
findOne()
메서드는 다음 매개변수를 사용합니다.
Parameter | 유형 | 설명 |
---|---|---|
query | 문서 | 선택 사항. 쿼리 연산자를 사용하여 쿼리 선택 기준을 지정합니다. |
projection | 문서 | |
options | 문서 | 선택 사항입니다. 쿼리에 대한 추가 옵션을 지정합니다. 이러한 옵션은 쿼리 동작과 결과 반환 방식을 수정합니다. 사용 가능한 옵션을 확인하려면 FindOptions을 참조하세요. |
행동
클라이언트 연결 해제
MongoDB 4.2부터 db.collection.findOne()
를 발급한 클라이언트가 작업이 완료되기 전에 연결을 끊는 경우, MongoDB는 db.collection.findOne()
를 사용하여 를killOp
을 종료로 표시합니다.
프로젝션
중요
언어 일관성
find()
및 findAndModify()
프로젝션을 집계의 $project
단계와 일치시키는 과정의 일환으로 다음을 수행합니다.
find()
및 프로젝션은 집계 표현식findAndModify()
및 구문을 사용할 수 있습니다.MongoDB는 프로젝션과 관련하여 추가 제한 사항을 시행합니다. 자세한 내용은 프로젝션 제한 사항을 참조하세요.
projection
매개변수는 일치하는 문서에서 어떤 필드가 반환되는지를 결정합니다. projection
매개변수는 다음 형식의 문서를 사용합니다.
{ field1: <value>, field2: <value> ... }
프로젝션 | 설명 |
---|---|
<field>: <1 or true> | 필드 포함 여부를 지정합니다. 프로젝션 값에 0이 아닌 정수를 지정하면 연산은 해당 값을 true 로 취급합니다. |
<field>: <0 or false> | 필드 제외 여부를 지정합니다. |
"<field>.$": <1 or true> | |
<field>: <array projection> | 배열 프로젝션 연산자( 뷰에는 사용할 수 없습니다. |
<field>: <$meta expression> |
뷰에는 사용할 수 없습니다. |
<field>: <aggregation expression> | 프로젝션된 필드의 값을 지정합니다. 리터럴 및 집계 변수 사용을 포함한 집계 식 및 구문을 사용하면 새 필드를 프로젝션하거나 기존 필드를 새 값으로 프로젝션할 수 있습니다.
|
임베디드 필드 지정
내장된 문서의 필드에 대해서는 다음 둘 중 하나를 사용하여 필드를 지정할 수 있습니다.
점 표기법(예시:
"field.nestedfield": <value>
중첩된 양식, 예를 들어
{ field: { nestedfield: <value> } }
_id
필드 프로젝션
필드를 표시하지 않기 위해 프로젝션에서 _id: 0
을 명시적으로 지정하지 않는 한 _id
필드는 기본적으로 반환된 문서에 포함됩니다.
포함 또는 제외
projection
필드는 포함과 제외 사양을 모두 포함할 수 없습니다. 단, _id
필드는 예외입니다.
필드를 명시적으로 포함하는 프로젝션에서
_id
필드는 명시적으로 제외할 수 있는 유일한 필드입니다.필드를 명시적으로 제외하는 프로젝션에서는
_id
필드가 명시적으로 포함할 수 있는 유일한 필드이지만,_id
필드는 기본적으로 포함됩니다.
프로젝션에 대한 자세한 내용은 다음 섹션도 같이 참조하세요.
예시
빈 쿼리 사양 사용
다음 작업은 bios collection에서 단일 문서를 반환합니다.
db.bios.findOne()
쿼리 사양 사용
다음 작업은 name
내장된 문서의 first
필드가 G
문자로 시작하는 경우 또는 birth
필드가 new
Date('01/01/1945')
값 미만인 경우 BIOS 컬렉션에서 일치하는 첫 번째 문서를 반환합니다.
db.bios.findOne( { $or: [ { 'name.first' : /^G/ }, { birth: { $lt: new Date('01/01/1945') } } ] } )
프로젝션 사용
projection
매개변수는 반환할 필드를 지정합니다. 매개변수에는 포함 또는 제외 사양이 있으며 _id
필드에 대한 제외 사양이 아닌 경우 둘 다 포함되지는 않습니다.
반환할 필드 지정
다음 작업은 BIOS 컬렉션에서 문서를 찾고 name
, contribs
, _id
필드만 반환합니다.
db.bios.findOne( { }, { name: 1, contribs: 1 } )
제외된 필드 외의 모든 필드 반환
다음 작업은 BIOS 컬렉션에서 contribs
필드에 OOP
요소가 포함되어 있는 문서를 반환하고 _id
필드, name
내장된 문서의 first
필드, birth
필드를 제외한 모든 필드를 반환합니다.
db.bios.findOne( { contribs: 'OOP' }, { _id: 0, 'name.first': 0, birth: 0 } )
옵션 포함
다음 작업은 sort
옵션을 사용하여 정렬된 bios
컬렉션 에서 일치하는 첫 번째 문서 를 반환합니다. 이 예시 에서는 컬렉션 이 birth
를 기준으로 오름차순으로 정렬됩니다.
db.bios.findOne( { }, { }, { sort: { birth: 1 } } )
결과 findOne
문서
단일 문서가 반환되기 때문에 커서 메서드를 findOne()
결과에 적용할 수 없습니다. 다음과 같은 방법으로 문서에 직접 액세스할 수 있습니다.
var myDocument = db.bios.findOne(); if (myDocument) { var myName = myDocument.name; print (tojson(myName)); }
let
옵션에서 변수 사용
쿼리 옵션을 지정하여 쿼리 동작을 수정하고 결과가 반환되는 방식을 지정할 수 있습니다.
예를 들어 findOne
메서드의 다른 곳에서 액세스할 수 있는 변수를 정의하려면 let
옵션을 사용합니다. 변수를 사용하여 결과를 필터링하려면 $expr
연산자 내에서 변수에 액세스해야 합니다.
컬렉션 cakeFlavors
을 만듭니다:
db.cakeFlavors.insertMany( [ { _id: 1, flavor: "chocolate" }, { _id: 2, flavor: "strawberry" }, { _id: 3, flavor: "cherry" } ] )
다음 예시에서는 let
에 targetFlavor
변수를 정의하고 이 변수를 사용하여 초콜릿 케이크 맛을 검색합니다.
db.cakeFlavors.findOne( { $expr: { $eq: [ "$flavor", "$$targetFlavor" ] } }, { _id: 0 }, { let : { targetFlavor: "chocolate" } } )
출력:
{ flavor: 'chocolate' }
사용 가능한 모든 쿼리 옵션을 보려면 FindOptions를 참조하세요.