문서 메뉴
문서 홈
/
MongoDB 매뉴얼
/ / /

db.collection.findOne()

이 페이지의 내용

  • 정의
  • 호환성
  • 구문
  • 행동
  • 예제
db.collection.findOne(query, projection, options)

중요

Mongo쉬 방법

이 페이지에서는 mongosh 메서드를 설명합니다. 이는 데이터베이스 명령 또는 Node.js와 같은 언어별 드라이버에 대한 설명서가 아닙니다.

데이터베이스 명령에 대해서는 find 명령을 참조하세요.

MongoDB API 드라이버의 경우 언어별 MongoDB 드라이버 설명서를 참조하세요.

레거시 mongo 셸 문서는 해당 MongoDB 서버 릴리스 문서를 참조하세요.

Mongo 셸 V4.4

collection 또는 에 지정된 쿼리 기준을 충족하는 문서 한 개를 반환합니다.

여러 문서가 쿼리를 충족하는 경우, 이 메서드는 디스크의 문서 순서를 반영하는 기본 순서에 따라 첫 번째 문서를 반환합니다. 고정 사이즈 컬렉션에서 기본 순서는 삽입 순서와 동일합니다. 쿼리를 충족하는 문서가 없으면 이 메서드는 null을 반환합니다.

projection 매개 변수를 지정하는 경우 findOne()projection 필드만 포함하는 문서를 반환합니다. _id 필드는 명시적으로 제외하지 않는 한 항상 포함됩니다.

참고

find() 메서드와 비슷하지만 findOne() 메서드는 커서가 아닌 문서를 반환합니다.

다음 환경에서 호스팅되는 배포에 db.collection.findOne() 사용할 수 있습니다.

  • MongoDB Atlas: 클라우드에서의 MongoDB 배포를 위한 완전 관리형 서비스

findOne() 메서드의 형식은 다음과 같습니다.

db.collection.findOne( <query>, <projection>, <options> )

findOne() 메서드는 다음 매개변수를 사용합니다.

매개 변수
유형
설명
query
문서
선택 사항. 쿼리 연산자를 사용하여 쿼리 선택 기준을 지정합니다.
projection
문서
선택 사항입니다. 프로젝션 연산자를 사용하여 반환할 필드를 지정합니다. 일치하는 문서의 모든 필드를 반환하려면 이 매개 변수를 생략합니다. 자세한 내용은 프로젝션을 참조하세요.
options
문서

선택 사항입니다. 쿼리에 대한 추가 옵션을 지정합니다. 이러한 옵션은 쿼리 동작과 결과 반환 방식을 수정합니다. 사용 가능한 옵션을 확인하려면 FindOptions을 참조하세요.

MongoDB 4.2부터 db.collection.findOne()를 발급한 클라이언트가 작업이 완료되기 전에 연결을 끊는 경우, MongoDB는 db.collection.findOne()를 사용하여 를killOp을 종료로 표시합니다.

중요

언어 일관성

find()findAndModify() 프로젝션을 집계의 $project 단계와 일치시키는 과정의 일환으로 다음을 수행합니다.

projection 매개변수는 일치하는 문서에서 어떤 필드가 반환되는지를 결정합니다. projection 매개변수는 다음 형식의 문서를 사용합니다.

{ field1: <value>, field2: <value> ... }
프로젝션
설명
<field>: <1 or true>
필드 포함 여부를 지정합니다. 프로젝션 값에 0이 아닌 정수를 지정하면 연산은 해당 값을 true로 취급합니다.
<field>: <0 or false>
필드 제외 여부를 지정합니다.
"<field>.$": <1 or true>

$ 배열 프로젝션 연산자를 사용하여 배열 필드의 쿼리 조건과 일치하는 첫 번째 요소를 반환합니다. 프로젝션 값에 대해 0이 아닌 정수를 지정하면 연산은 값을 true로 처리합니다.

에는 사용할 수 없습니다.

<field>: <array projection>

배열 프로젝션 연산자($elemMatch, $slice)를 사용하여 포함할 배열 요소를 지정합니다.

에는 사용할 수 없습니다.

<field>: <$meta expression>

$meta 연산자 표현식을 사용하여 사용 가능한per-document metadata를 포함하도록 지정합니다.

에는 사용할 수 없습니다.

<field>: <aggregation expression>

프로젝션된 필드의 값을 지정합니다.

리터럴 및 집계 변수 사용을 포함한 집계 식 및 구문을 사용하면 새 필드를 프로젝션하거나 기존 필드를 새 값으로 프로젝션할 수 있습니다.

  • 프로젝션 값에 숫자가 아니면서 부울이 아닌 리터럴(예: 리터럴 문자열, 배열 또는 연산자 표현식)을 지정하면 필드가 새 값으로 프로젝션됩니다.

    • { field: [ 1, 2, 3, "$someExistingField" ] }

    • { field: "New String Value" }

    • { field: { status: "Active", total: { $sum: "$existingArray" } } }

  • 필드의 리터럴 값을 프로젝션하려면 $literal 애그리게이션 표현식을 사용합니다. 예는 다음과 같습니다.

    • { field: { $literal: 5 } }

    • { field: { $literal: true } }

    • { field: { $literal: { fieldWithValue0: 0, fieldWithValue1: 1 } } }

포함된 문서의 필드에 대해서는 다음 둘 중 하나를 사용하여 필드를 지정할 수 있습니다.

  • 점 표기법(예: "field.nestedfield": <value>

  • 중첩된 양식, 예를 들어 { field: { nestedfield: <value> } }

필드를 표시하지 않기 위해 프로젝션에서 _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 }
)

단일 문서가 반환되기 때문에 커서 메서드를 findOne() 결과에 적용할 수 없습니다. 다음과 같은 방법으로 문서에 직접 액세스할 수 있습니다.

var myDocument = db.bios.findOne();
if (myDocument) {
var myName = myDocument.name;
print (tojson(myName));
}

쿼리 옵션을 지정하여 쿼리 동작을 수정하고 결과가 반환되는 방식을 지정할 수 있습니다.

예를 들어 findOne 메서드의 다른 곳에서 액세스할 수 있는 변수를 정의하려면 let 옵션을 사용합니다. 변수를 사용하여 결과를 필터링하려면 $expr 연산자 내에서 변수에 액세스해야 합니다.

컬렉션 cakeFlavors을 만듭니다:

db.cakeFlavors.insertMany( [
{ _id: 1, flavor: "chocolate" },
{ _id: 2, flavor: "strawberry" },
{ _id: 3, flavor: "cherry" }
] )

다음 예제에서는 lettargetFlavor 변수를 정의하고 이 변수를 사용하여 초콜릿 케이크 맛을 검색합니다.

db.cakeFlavors.findOne(
{ $expr: { $eq: [ "$flavor", "$$targetFlavor" ] } },
{ _id: 0 },
{ let : { targetFlavor: "chocolate" }
} )

출력:

{ flavor: 'chocolate' }

사용 가능한 모든 쿼리 옵션을 보려면 FindOptions를 참조하세요.

← db.collection.findAndModify()

이 페이지의 내용