AI 에이전트의 경우: 문서 인덱스는 https://www.mongodb.com/ko-kr/docs/llms.txt에서 사용할 수 있으며, 모든 페이지의 마크다운 버전은 어떤 URL 경로에 .md를 추가하여 사용할 수 있습니다.
Docs Menu

$ (프로젝션 연산자)

$

위치 연산자 의 $ 내용을 <array> 제한하여 배열 의 쿼리 조건과 일치하는 첫 번째 요소를 반환합니다.

선택한 문서에 특정 배열 요소가 하나만 필요한 경우 findOne() 메서드 또는 메서드의 find() 프로젝션 문서 $ 에서 를 사용합니다.

지정된 조건과 일치하는 요소만 있는 배열을 반환하려면 집계 연산자 $filter를 참조하세요.

참고

명확화

업데이트할 배열 요소를 지정하려면 업데이트에 대한 위치 $ 연산자를 참조하세요.

$ 연산자 와 연산자 모두 조건에 따라 $elemMatch 배열 에서 일치하는 첫 번째 요소를 프로젝트 .

$ 연산자 쿼리 성명서 일부 조건을 기반으로 컬렉션 의 각 문서 에서 첫 번째로 일치하는 배열 요소를 프로젝션합니다.

$elemMatch 프로젝션 연산자는 명시적 조건 인수를 받습니다. 이를 통해 쿼리에 없는 조건을 기반으로 프로젝트하거나 배열에 내장된 문서의 여러 필드를 기반으로 프로젝트해야 하는 경우 투영할 수 있습니다. 예시는 배열 필드 제한을 참조하세요.

db.collection.find() 뷰에 대한 작업은 프로젝션 연산자 지원 $ 하지 않습니다.

배열에 지정된 쿼리 조건과 일치하는 첫 번째 배열 요소를 반환하려면 다음을 수행하세요.

db.collection.find( { <array>: <condition> ... },
{ "<array>.$": 1 } )
db.collection.find( { <array.field>: <condition> ...},
{ "<array>.$": 1 } )

연산자 $ 사용하여 쿼리 <array> 문서 에 표시되지 않는 필드 제한할 수 있습니다. 이전 버전의 MongoDB 에서는 제한되는 <array> 필드 쿼리 문서 에 나타나야 합니다.

db.collection.find( { <someOtherArray>: <condition> ... },
{ "<array>.$" : 1 } )

중요

예상되는 동작을 보장하려면 쿼리 문서와 프로젝션 문서에 사용되는 배열의 길이가 동일해야 합니다. 배열의 길이가 다른 경우 특정 시나리오에서 작업이 오류를 일으킬 수 있습니다.

MongoDB에서는 배열에 대한 프로젝션을 처리할 때 다음이 필요합니다.

  • 프로젝션 문서 에는 하나의 위치 연산자 만 나타날 수 있습니다.$

  • 쿼리 문서에는 하나의 배열 필드만 표시되어야 합니다. 쿼리 문서에 배열 필드를 추가하면 정의되지 않은 동작이 발생할 수 있습니다.

    예를 들어 다음 프로젝션으로 인해 정의되지 않은 동작이 발생할 수 있습니다.

    db.collection.find( { <array>: <value>, <someOtherArray>: <value2> },
    { "<array>.$": 1 } )
  • 쿼리 문서에는 조건이 적용되는 배열 필드에 대한 단일 조건만 포함되어야 합니다. 여러 조건이 서로 상충하여 정의되지 않은 동작을 유발할 수 있습니다.

    해당 배열 내의 문서의 여러 필드에 대한 기준을 지정하려면 $elemMatch 쿼리 연산자를 사용합니다. 예를 들어 다음 쿼리는 mean이 70보다 크고 grade가 90보다 큰 grades 배열 내의 첫 번째 문서를 반환합니다.

    db.students.find( { grades: { $elemMatch: {
    mean: { $gt: 70 },
    grade: { $gt:90 }
    } } },
    { "grades.$": 1 } )

    문서를 선택하는 조건과 해당 문서 내의 필드를 선택하는 조건을 분리해야 하는 경우에도 $elemMatch 연산자를 사용해야 합니다.

메서드에 가 find() 포함된 경우 메서드는 sort() 위치 프로젝션 find() 연산자 적용하기 sort() 전에 $ 일치하는 문서를 정렬하기 위해 를 적용합니다.

배열 필드에 필드 이름이 같은 문서가 여러 개 있고 find() 메서드에 반복 필드에 sort() 기호가 포함되어 있는 경우, $ 프로젝션 연산자 이전에 배열 요소에 정렬이 적용되었으므로 반환된 문서에 정렬 순서가 반영되지 않을 수 있습니다.

$ 프로젝션 연산자 필드 경로 의 끝에만 나타날 수 있습니다( 예시 "field.$" :"fieldA.fieldB.$" 또는).

예를 들어 다음 연산은 유효하지 않습니다.

db.inventory.find( { }, { "instock.$.qty": 1 } )

이 문제를 해결하려면 프로젝션 연산자 뒤에 오는 필드 경로 의 구성 요소를 제거 $ .

find 및 findAndModify $slice 프로젝션 프로젝션 표현식 의 일부로 프로젝션 표현식 포함할 수 $ 없습니다.

예를 들어 다음 연산은 유효하지 않습니다.

db.inventory.find( { "instock.qty": { $gt: 25 } }, { "instock.$": { $slice: 1 } } )

이전 버전에서 MongoDB는 쿼리 조건과 일치하는 instock 배열의 첫 번째 요소 (instock.$)를 반환합니다. 즉, 위치 프로젝션 "instock.$" 이(가) 우선하고 $slice:1 은(는) 작동하지 않습니다. "instock.$": { $slice: 1 } 은(는) 다른 문서 필드를 제외하지 않습니다.

students 컬렉션에 포함된 문서는 다음과 같습니다.

db.students.insertMany( [
{ _id : 1, "semester" : 1, "grades" : [ 70, 87, 90 ] },
{ _id : 2, "semester" : 1, "grades" : [ 90, 88, 92 ] },
{ _id : 3, "semester" : 1, "grades" : [ 85, 100, 90 ] },
{ _id : 4, "semester" : 2, "grades" : [ 79, 85, 80 ] },
{ _id : 5, "semester" : 2, "grades" : [ 88, 88, 92 ] },
{ _id : 6, "semester" : 2, "grades" : [ 95, 90, 96 ] }
] )

다음 쿼리에서 프로젝션 { "grades.$": 1 }는 grades 필드에 대해 85 이상인 첫 번째 요소만 반환합니다.

db.students.find( { semester: 1, grades: { $gte: 85 } },
{ "grades.$": 1 } )

이 작업은 다음 문서를 반환합니다.

{ "_id" : 1, "grades" : [ 87 ] }
{ "_id" : 2, "grades" : [ 90 ] }
{ "_id" : 3, "grades" : [ 85 ] }

배열 필드 grades 에 보다 크거나 같은 요소가 여러 개 포함될 수 85 있지만 프로젝션 연산자 배열 에서 첫 번째로 일치하는 요소만 $ 반환합니다.

students collection에는 grades 필드가 문서의 배열인 다음 문서가 포함되며, 각 문서에는 grade, mean, std라는 세 개의 필드 이름이 있습니다.

db.students.insertMany( [
{ _id : 7, semester: 3, "grades" : [ { grade: 80, mean: 75, std: 8 },
{ grade: 85, mean: 90, std: 5 },
{ grade: 90, mean: 85, std: 3 } ] },
{ _id : 8, semester: 3, "grades" : [ { grade: 92, mean: 88, std: 8 },
{ grade: 78, mean: 90, std: 5 },
{ grade: 88, mean: 85, std: 3 } ] }
] )

다음 쿼리에서 { "grades.$": 1 } 프로젝션은 grades 필드에 대해 mean가 70보다 큰 첫 번째 요소만 반환합니다.

db.students.find(
{ "grades.mean": { $gt: 70 } },
{ "grades.$": 1 }
)

이 작업은 다음 문서를 반환합니다.

{ "_id" : 7, "grades" : [ { "grade" : 80, "mean" : 75, "std" : 8 } ] }
{ "_id" : 8, "grades" : [ { "grade" : 92, "mean" : 88, "std" : 8 } ] }

$elemMatch (projection)

이 페이지 평가하기