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

찾기

이 페이지의 내용

  • 정의
  • 구문
  • 행동
  • 예제
find

쿼리를 실행하고 클라이언트가 커서를 생성할 수 있는 첫 번째 결과 배치와 커서 ID를 반환합니다.

mongosh 에서 이 명령은 db.collection.find() 또는 db.collection.findOne() 헬퍼 메서드를 통해서도 실행할 수 있습니다.

헬퍼 메서드는 mongosh 사용자에게 편리하지만 데이터베이스 명령과 동일한 수준의 정보를 반환하지 못할 수 있습니다. 편의가 필요하지 않거나 추가 리턴 필드가 필요한 경우 데이터베이스 명령을 사용합니다.

find 명령의 구문은 다음과 같습니다.

버전 5.0에서 변경됨

db.runCommand(
{
find: <string>,
filter: <document>,
sort: <document>,
projection: <document>,
hint: <document or string>,
skip: <int>,
limit: <int>,
batchSize: <int>,
singleBatch: <bool>,
comment: <any>,
maxTimeMS: <int>,
readConcern: <document>,
max: <document>,
min: <document>,
returnKey: <bool>,
showRecordId: <bool>,
tailable: <bool>,
oplogReplay: <bool>,
noCursorTimeout: <bool>,
awaitData: <bool>,
allowPartialResults: <bool>,
collation: <document>,
allowDiskUse : <bool>,
let: <document> // Added in MongoDB 5.0
}
)

이 명령에는 다음과 같은 필드를 사용할 수 있습니다.

필드
유형
설명
find
문자열
쿼리할 컬렉션 또는 의 이름입니다.
filter
문서
선택 사항. 쿼리 술어입니다. 지정하지 않으면 컬렉션의 모든 문서가 술어와 일치합니다.
문서
선택 사항. 결과 순서를 지정하는 정렬 지정입니다.
projection
문서

선택 사항. 반환된 문서에 포함할 필드를 결정하기 위한 프로젝션 사양입니다. 투영투영 연산자를참조하세요.

뷰에 대한 find() 작업은 다음 쿼리 및 투영 연산자 연산자를 지원하지 않습니다.

hint
문자열 또는 문서

선택 사항. 인덱스 사양. 인덱스 이름을 문자열로 지정하거나 인덱스 키 패턴으로 지정합니다. 이 옵션을 지정하면 쿼리 시스템은 힌트 인덱스를 사용하는 계획만 고려합니다.

다음과 같은 예외를 제외하고 명령에 min 및/또는 max 필드가 포함된 경우 hint가 필요하고, filter_id 필드 { _id: <value> }의 동일성 조건인 경우 min 및/또는 max와 함께 hint가 필요하지 않습니다.

skip
양의 정수
선택 사항. 건너뛸 문서 수입니다. 기본값은 입니다.
limit
음수가 아닌 정수
선택 사항. 반환할 문서의 최대 개수. 지정하지 않은 경우 기본값은 '제한 없음'입니다. 개로 제한하면 제한을 설정하지 않은 것과 동일합니다.
batchSize
음수가 아닌 정수

선택 사항. 첫 번째 배치에서 반환할 문서 수입니다. 기본값은 101입니다. batchSize가 이면 커서가 설정되지만 첫 번째 배치에서는 문서가 반환되지 않습니다.

이전 유선 프로토콜 버전과 달리 find 명령의 batchSize가 1이면 커서가 닫히지 않습니다.

singleBatch
부울
선택 사항. 첫 번째 일괄 처리 후에 커서를 닫을지 여부를 결정합니다. 기본값은 false입니다.
comment
어떤

선택 사항. 이 명령에 첨부할 사용자 제공 코멘트입니다. 설정되면 이 설명은 다음 위치에서 이 명령의 레코드와 함께 표시됩니다.

댓글은 유효한 모든 BSON types (문자열, 정수, 객체, 배열 등)이 될 수 있습니다.

참고

find 명령에 설정된 모든 주석은 find 커서에서 실행되는 후속 getMore 명령에 의해 상속됩니다.

maxTimeMS
음수가 아닌 정수

선택 사항.

시간 제한을 밀리초 단위로 지정합니다. maxTimeMS에 값을 지정하지 않으면 작업이 시간 초과되지 않습니다. 0 값은 바인딩되지 않는 기본 동작을 명시적으로 지정합니다.

MongoDB는 db.killOp()와 동일한 메커니즘을 사용하여 할당된 시간 제한을 초과하는 작업을 종료합니다. MongoDB는 지정된 중단 지점 중 하나에서만 작업을 종료합니다.

2}를 지정할 때는 데이터 보유 멤버의 과반수를 사용할 수 없는 경우 linearizable read concern항상 을 사용하세요.maxTimeMS maxTimeMS 는 작업이 무기한으로 차단되지 않도록 하며, 대신 읽기 고려를 충족할 수 없는 경우 작업이 오류를 반환하도록 합니다.

readConcern
문서

선택 사항. 읽기 고려를 지정합니다.

MongoDB 3.6부터 readConcern 옵션의 구문은 다음과 같습니다. readConcern: { level: <value> }

가능한 읽기 고려 수준은 다음과 같습니다.

  • "local"이는 프라이머리 및 보조 노드에 대한 읽기 작업의 읽기 고려 수준입니다.

  • "available"입니다. 프라이머리 및 세컨더리에 대한 읽기 작업에 사용할 수 있습니다. "available"은 프라이머리 및 비 샤드형 세컨더리에 대해 "local"과 동일하게 동작합니다. 쿼리는 인스턴스의 가장 최근 데이터를 반환합니다.

  • "majority". WiredTiger 스토리지 엔진을 사용하는 복제본 세트에 사용할 수 있습니다.

  • "linearizable". primary의 읽기 작업에만 사용할 수 있습니다.

읽기 고려 수준에 대한 자세한 내용은 읽기 고려 수준을 참조하세요.

getMore 명령은 원래 find 명령에 지정된 readConcern 수준을 사용합니다.

max
문서

선택 사항. 특정 인덱스에 대한 배타적 상한선입니다. 자세한 내용은 cursor.max() 참조하세요.

max 필드를 사용하려면 지정된 filter_id 필드 { _id: <value> }의 동일성 조건이 아닌 한 명령에 hint 도 사용해야 합니다.

min
문서

선택 사항. 특정 인덱스에 대한 포괄 하한입니다. 자세한 내용은 cursor.min() 참조하십시오.

min 필드를 사용하려면 지정된 filter_id 필드 { _id: <value> }의 동일성 조건이 아닌 한 명령에 hint 도 사용해야 합니다.

returnKey
부울
선택 사항입니다. true인 경우 결과 문서의 인덱스 키만 반환합니다. 기본값은 false입니다. ReturnKey가 true이고 find 명령이 색인을 사용하지 않는 경우 반환된 문서는 비어 있습니다.
showRecordId
부울
선택 사항. 각 문서에 대한 레코드 식별자를 반환할지 여부를 결정합니다. true이면 반환된 문서에 $recordId 필드를 추가합니다.
tailable
부울
선택 사항. 제한된 컬렉션에 대해 조정 가능한 커서를 반환합니다.
awaitData
부울
선택 사항입니다. Tailable 옵션과 함께 사용하면 데이터 끝에 있는 경우 데이터를 반환하지 않는 대신 커서의 getMore 명령을 일시적으로 차단할 수 있습니다. 타임아웃 기간이 지나면 find(이)가 정상적으로 반환합니다.
noCursorTimeout
부울
선택 사항입니다. 비활성 기간인 30분 후 서버가 비세션 유휴 커서의 시간 초과를 방지합니다. 세션의 일부인 커서에는 무시됩니다. 자세한 내용은 세션 유휴 시간 초과을 참조하세요.
부울

선택 사항. 샤드된 컬렉션에 대한 쿼리의 경우, 쿼리된 하나 이상의 샤드를 사용할 수 없는 경우 명령(또는 후속 getMore 명령)이 오류 대신 부분적인 결과를 반환하도록 허용합니다.

쿼리된 샤드를 사용할 수 없기 때문에 find(또는 후속 getMore 명령)(이)가 부분 결과를 반환하는 경우 찾기 출력에는 partialResultsReturned 지표 필드가 포함됩니다. 쿼리된 샤드를 초기 find 명령에 사용할 수 있지만, 후속 getMore 명령에 하나 이상의 샤드를 사용할 수 없게 되는 경우, 샤드를 사용할 수 없는 동안 실행되는 getMore 명령만 partialResultsReturned(을)를 출력에 포함합니다.

collation
문서

선택 사항.

작업에 사용할 데이터 정렬을 지정합니다.

데이터 정렬을 사용하면 대소문자 및 악센트 표시 규칙과 같은 문자열 비교에 대한 언어별 규칙을 지정할 수 있습니다.

데이터 정렬 옵션의 구문은 다음과 같습니다:

collation: {
locale: <string>,
caseLevel: <boolean>,
caseFirst: <string>,
strength: <int>,
numericOrdering: <boolean>,
alternate: <string>,
maxVariable: <string>,
backwards: <boolean>
}

데이터 정렬을 지정할 때 locale 필드는 필수이고, 다른 데이터 정렬 필드는 모두 선택 사항입니다. 필드에 대한 설명은 데이터 정렬 문서를 참조하세요.

데이터 정렬이 지정되지 않았지만 컬렉션에 기본 데이터 정렬이 있는 경우( db.createCollection() 참조), 작업은 컬렉션에 지정된 데이터 정렬을 사용합니다.

컬렉션 또는 연산에 대한 데이터 정렬이 지정되지 않은 경우, MongoDB는 이전 버전에서 문자열 비교에 사용된 간단한 이진 비교를 사용합니다.

한 연산에 대해 여러 데이터 정렬을 지정할 수 없습니다. 예를 들어 필드별로 서로 다른 데이터 정렬을 지정할 수 없으며 정렬과 함께 찾기를 수행하는 경우 찾기 와 정렬에서 각각 다른 데이터 정렬을 사용하는 것은 허용되지 않습니다.

부울

선택 사항.

이 옵션을 사용하여 특정 쿼리에 대한 allowDiskUseByDefault를 재정의할 수 있습니다. 이 옵션을 사용하여 다음 중 하나를 수행할 수 있습니다.

  • 기본적으로 디스크 사용이 허용된 시스템에서는 디스크 사용을 금지합니다.

  • 기본적으로 디스크 사용이 금지된 시스템에서 디스크 사용을 허용합니다.

MongoDB 6.0부터 allowDiskUseByDefaulttrue로 설정되어 있고 서버의 파이프라인 실행 단계에 100메가바이트 이상의 메모리가 필요한 경우 MongoDB는 쿼리에 { allowDiskUse: false }를 지정하지 않는 한 임시 파일을 디스크에 자동으로 씁니다.

자세한 내용은 allowDiskUseByDefault를 참조하세요.

allowDiskUse MongoDB가 인덱스를 사용하여 지정된 정렬을 충족할 수 있는 경우 또는 차단 정렬에 100MB 미만의 메모리가 필요한 경우에는 효과가 없습니다.

allowDiskUse 에 대한 자세한 문서는 cursor.allowDiskUse() 참조하세요.

대용량 차단 정렬의 메모리 제한에 대한 자세한 내용은 정렬 및 인덱스 사용을참조하세요.

문서

선택 사항.

변수 목록이 있는 문서를 지정합니다. 이를 통해 쿼리 텍스트에서 변수를 분리하여 명령 가독성을 향상시킬 수 있습니다.

문서 구문은 다음과 같습니다:

{
<variable_name_1>: <expression_1>,
...,
<variable_name_n>: <expression_n>
}

변수는 표현식에서 반환된 값으로 설정되며 이후에는 변경할 수 없습니다.

명령에서 변수 값에 액세스하려면 $$<variable_name> 형식의 이중 달러 기호 접두사 ($$) 를 변수 이름과 함께 사용하십시오.예: $$targetTotal.

참고

변수를 사용하여 결과를 필터링하려면 $expr 연산자 내에서 변수에 액세스해야 합니다.

let 및 변수를 사용한 전체 예시는 let에서 변수 사용을 참조하세요.

버전 5.0에 추가.

이 명령은 커서 ID 및 첫 번째 문서 배치를 포함하여 커서 정보가 포함된 문서를 반환합니다. 예를 들어, 샤딩된 컬렉션에 대해 실행하면 다음 문서가 반환됩니다.

{
"cursor" : {
"firstBatch" : [
{
"_id" : ObjectId("5e8e2ca217b5324fa9847435"),
"zipcode" : "20001",
"x" : 1
},
{
"_id" : ObjectId("5e8e2ca517b5324fa9847436"),
"zipcode" : "30001",
"x" : 1
}
],
"partialResultsReturned" : true,
"id" : NumberLong("668860441858272439"),
"ns" : "test.contacts"
},
"ok" : 1,
"operationTime" : Timestamp(1586380205, 1),
"$clusterTime" : {
"clusterTime" : Timestamp(1586380225, 2),
"signature" : {
"hash" : BinData(0,"aI/jWsUVUSkMw8id+A+AVVTQh9Y="),
"keyId" : NumberLong("6813364731999420435")
}
}
}
필드
설명
cursor

커서 id 및 문서의 firstBatch 을 포함하여 커서 정보를 포함합니다.

샤딩된 컬렉션에 대한 작업이 쿼리된 샤드를 사용할 수 없어 부분적인 결과를 반환하는 경우 cursor 문서에는 partialResultsReturned 필드가 포함됩니다. 쿼리된 샤드를 사용할 수 없어 오류가 아닌 부분적인 결과를 반환하려면 allowPartialResultstrue로 설정한 상태에서 find 명령을 실행해야 합니다. allowPartialResults를 참조하세요.

쿼리된 샤드를 처음에는 find 명령에 사용할 수 있지만 후속 getMore 명령에서 하나 이상의 샤드를 사용할 수 없게 되는 경우, 쿼리된 샤드를 사용할 수 없을 때 실행되는 getMore 명령만 출력에 partialResultsReturned 플래그를 포함합니다.

"ok"
명령에 성공했는지(1) 또는 실패했는지(0) 여부를 나타냅니다.

앞서 언급한 find 관련 필드 외에도 db.runCommand()에는 복제본 세트 및 샤딩된 클러스터에 대한 다음 정보가 포함되어 있습니다.

  • $clusterTime

  • operationTime

자세한 내용은 db.runCommand() 결과를 참조하세요.

MongoDB 5.1부터 잘못된 $regex options 옵션은 더 이상 무시되지 않습니다. 이 변경으로 $regex optionsaggregate 명령 및 투영 쿼리에서 $regex을 사용하는 것과 더 일관성이 있습니다.

버전 4.0에 추가.

세션 내에서 생성된 커서의 경우 세션 외부에서 getMore을(를) 호출할 수 없습니다.

마찬가지로 세션 외부에서 만든 커서의 경우 세션 내부에서 getMore를 호출할 수 없습니다.

MongoDB 드라이버와 mongosh는 승인되지 않은 쓰기 작업을 제외한 모든 작업을 서버 세션과 연결합니다. 세션과 명시적으로 연결되지 않은 작업(예: Mongo.startSession() 사용)의 경우, MongoDB 드라이버와 mongosh는 암시적 세션을 생성하고 이를 작업과 연결합니다.

세션이 30분 이상 유휴 상태인 경우, MongoDB 서버는 해당 세션을 만료된 것으로 표시하고 언제든지 세션을 종료할 수 있습니다. MongoDB 서버가 세션을 종료하면 진행 중인 모든 작업과 해당 세션과 관련된 열린 커서도 종료됩니다. 여기에는 noCursorTimeout() 또는 30분보다 큰 maxTimeMS()로 구성된 커서가 포함됩니다.

커서를 반환하는 작업의 경우 커서가 30분 이상 유휴 상태일 수 있는 경우 명시적 세션 내에서 Mongo.startSession()을 사용하여 작업을 실행하고 refreshSessions 명령을 사용하여 세션을 주기적으로 새로 고칩니다. 자세한 내용은 세션 유휴 시간 초과를 참조하세요.

find분산 트랜잭션 내에서 사용할 수 있습니다.

  • 트랜잭션 외부에서 생성된 커서의 경우 트랜잭션 내부에서 getMore을(를) 호출할 수 없습니다.

  • 트랜잭션에서 생성된 커서의 경우 트랜잭션 외부에서 getMore를 호출할 수 없습니다.

중요

대부분의 경우 분산 트랜잭션은 단일 문서 쓰기에 비해 더 큰 성능 비용이 발생하므로 분산 트랜잭션의 가용성이 효과적인 스키마 설계를 대체할 수는 없습니다. 대부분의 시나리오에서 비정규화된 데이터 모델 (내장된 문서 및 배열) 은 계속해서 데이터 및 사용 사례에 최적일 것입니다. 즉, 대부분의 시나리오에서 데이터를 적절하게 모델링하면 분산 트랜잭션의 필요성이 최소화됩니다.

추가 트랜잭션 사용 고려 사항(예: 런타임 제한 및 oplog 크기 제한)은 프로덕션 고려사항을 참조하세요.

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

Stable API V1를 사용하는 경우 다음 find 명령 필드는 지원되지 않습니다:

  • awaitData

  • max

  • min

  • noCursorTimeout

  • oplogReplay

  • returnKey

  • showRecordId

  • tailable

MongoDB 6.0부터 인덱스 필터는 이전에 명령을 planCacheSetFilter 사용하여 설정한 데이터 정렬을 사용합니다.

다음 명령은 find 명령 필터링을 rating 필드와 cuisine 필드에서 실행합니다. 이 명령에는 일치하는 문서에서 _id, name, ratingaddress 필드의 필드만 반환하는 projection(이)가 포함되어 있습니다.

이 명령은 결과 집합의 문서를 name 필드를 기준으로 정렬하고 결과 집합을 5개 문서로 제한합니다.

db.runCommand(
{
find: "restaurants",
filter: { rating: { $gte: 9 }, cuisine: "italian" },
projection: { name: 1, rating: 1, address: 1 },
sort: { name: 1 },
limit: 5
}
)

기본 읽기 문제 수준인 "local" 를 재정의하려면 readConcern 옵션을 사용하십시오.

복제본 세트에 대한 다음 작업은 대부분의 노드에 기록된 것으로 확인된 데이터의 가장 최근 복제본을 읽을 수 있도록 "majority"읽기 고려를 지정합니다.

db.runCommand(
{
find: "restaurants",
filter: { rating: { $lt: 5 } },
readConcern: { level: "majority" }
}
)

읽기 고려 수준에 관계없이 노드의 최신 데이터는 시스템에 있는 데이터의 최신 버전을 반영하지 않을 수 있습니다.

getMore 명령은 원래 find 명령에 지정된 readConcern 수준을 사용합니다.

cursor.readConcern() 메서드를 사용하여 mongosh 메서드 db.collection.find()readConcern을 지정할 수 있습니다.

db.restaurants.find( { rating: { $lt: 5 } } ).readConcern("majority")

사용 가능한 읽기 우려사항에 대한 자세한 내용은 읽기 우려사항을참조하세요.

데이터 정렬을 사용하면 대소문자 및 악센트 표시 규칙과 같은 문자열 비교에 대한 언어별 규칙을 지정할 수 있습니다.

다음 작업은 지정된 데이터 정렬을 사용하여 find 명령을 실행합니다:

db.runCommand(
{
find: "myColl",
filter: { category: "cafe", status: "a" },
sort: { category: 1 },
collation: { locale: "fr", strength: 1 }
}
)

mongoshdb.collection.find() 작업에 대한 데이터 정렬을 지정하기 위해 cursor.collation()을 제공합니다.

버전 5.0에 추가.

명령의 다른 곳에서 액세스할 수 있는 변수를 정의하려면 let 옵션을 사용합니다.

참고

변수를 사용하여 결과를 필터링하려면 $expr 연산자 내에서 변수에 액세스해야 합니다.

컬렉션 cakeFlavors을 만듭니다:

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

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

db.cakeFlavors.runCommand( {
find: db.cakeFlavors.getName(),
filter: { $expr: { $eq: [ "$flavor", "$$targetFlavor" ] } },
let : { targetFlavor: "chocolate" }
} )
← 삭제

이 페이지의 내용