Docs Menu
Docs Home
/
MongoDB 매뉴얼
/ / /

getField(집계)

이 페이지의 내용

  • 정의
  • 구문
  • 행동
  • 예시
$getField

버전 5.0에 추가.

문서에서 지정된 필드의 값을 반환합니다. 객체를 지정하지 않으면 $getField$$CURRENT의 필드 값을 반환합니다.

$getField를 사용하여 마침표(.)를 포함하거나 달러 기호($)로 시작하는 이름을 가진 필드의 값을 조회할 수 있습니다.

$setField을(를) 사용하여 달러 기호($) 또는 마침표(.)가 포함된 이름의 필드를 추가하거나 업데이트합니다.

$getField 의 구문은 다음과 같습니다:

{
$getField: {
field: <String>,
input: <Object>
}
}
필드
유형
설명

field

문자열

값을 반환하려는 input 객체의 필드입니다. field는 문자열 상수로 리졸브되는 그 어떤 유효한 표현식도 될 수 있습니다.

field가 달러 기호($)로 시작하는 경우 필드 이름을 $literal 표현식 안에 배치하여 해당 값을 반환합니다.

input

객체

기본값: $$CURRENT

값을 반환하려는 field가 포함된 유효한 표현식입니다. input은 객체, missing, null 또는 undefined로 해석되어야 합니다. 생략되면 기본값으로 파이프라인에서 현재 처리 중인 문서($$CURRENT)가 사용됩니다.

$getField에는 $$CURRENT에서 필드 값을 검색하기 위한 다음과 같은 단축 구문이 있습니다.

{
$getField: <String>
}

이 구문의 경우 인수는 위에 설명된 field 값과 동일합니다.

  • field가 문자열 상수가 아닌 것으로 확인되면 $getField는 오류를 반환합니다.

  • 지정한 fieldinput 객체에 없거나, input 객체를 지정하지 않은 경우 $$CURRENT에 없으면 $getFieldmissing을 반환합니다.

  • inputmissing, undefined 또는 null로 평가되면 $getFieldnull을 반환합니다.

  • input이 객체, missing, undefined 또는 null 이외의 것으로 평가되면 $getField는 오류를 반환합니다.

  • $getField는 객체 또는 배열을 암시적으로 순회하지 않습니다. 예를 들어, $getFielda.b.cfield 값을 중첩된 필드 { a: { b: { c: } } } 대신 최상위 필드 a.b.c로 평가합니다.

다음도 참조하세요.

다음 문서가 포함된 inventory 컬렉션을 생각해 보세요.

{ "_id" : 1, "item" : "sweatshirt", "price.usd": 45.99, qty: 300 }
{ "_id" : 2, "item" : "winter coat", "price.usd": 499.99, qty: 200 }
{ "_id" : 3, "item" : "sun dress", "price.usd": 199.99, qty: 250 }
{ "_id" : 4, "item" : "leather boots", "price.usd": 249.99, qty: 300 }
{ "_id" : 5, "item" : "bow tie", "price.usd": 9.99, qty: 180 }

다음 작업은 $getField$gt 연산자를 사용하여 price.usd200보다 큰 제품을 찾습니다.

db.inventory.aggregate( [
{
$match:
{ $expr:
{ $gt: [ { $getField: "price.usd" }, 200 ] }
}
}
] )

이 연산은 다음과 같은 결과를 반환합니다.

[
{ _id: 2, item: 'winter coat', qty: 200, 'price.usd': 499.99 },
{ _id: 4, item: 'leather boots', qty: 300, 'price.usd': 249.99 }
]

다음 문서가 포함된 inventory 컬렉션을 생각해 보세요.

{ "_id" : 1, "item" : "sweatshirt", "$price": 45.99, qty: 300 }
{ "_id" : 2, "item" : "winter coat", "$price": 499.99, qty: 200 }
{ "_id" : 3, "item" : "sun dress", "$price": 199.99, qty: 250 }
{ "_id" : 4, "item" : "leather boots", "$price": 249.99, qty: 300 }
{ "_id" : 5, "item" : "bow tie", "$price": 9.99, qty: 180 }

다음 연산은 $getField, $gt, $literal 연산자를 사용하여 $price200보다 큰 제품을 찾습니다.

db.inventory.aggregate( [
{
$match:
{ $expr:
{ $gt: [ { $getField: {$literal: "$price" } }, 200 ] }
}
}
] )

이 연산은 다음과 같은 결과를 반환합니다.

[
{ _id: 2, item: 'winter coat', qty: 200, '$price': 499.99 },
{ _id: 4, item: 'leather boots', qty: 300, '$price': 249.99 }
]

다음 문서로 inventory collection을 생성합니다.

db.inventory.insertMany( [
{ "_id" : 1, "item" : "sweatshirt", "price.usd": 45.99,
"quantity": { "$large": 50, "$medium": 50, "$small": 25 }
},
{ "_id" : 2, "item" : "winter coat", "price.usd": 499.99,
"quantity": { "$large": 35, "$medium": 35, "$small": 35 }
},
{ "_id" : 3, "item" : "sun dress", "price.usd": 199.99,
"quantity": { "$large": 45, "$medium": 40, "$small": 5 }
},
{ "_id" : 4, "item" : "leather boots", "price.usd": 249.99,
"quantity": { "$large": 20, "$medium": 30, "$small": 40 }
},
{ "_id" : 5, "item" : "bow tie", "price.usd": 9.99,
"quantity": { "$large": 0, "$medium": 10, "$small": 75 }
}
] )

다음 작업은 $small 항목 수가 20 이하인 문서를 반환합니다.

db.inventory.aggregate( [
{ $match:
{ $expr:
{ $lte:
[
{ $getField:
{ field: { $literal: "$small" },
input: "$quantity"
}
},
20
]
}
}
}
] )

이러한 연산자를 사용하여 collection을 쿼리합니다:

  • $lte 연산자는 20보다 작거나 같은 값을 찾습니다.

  • $small 필드가 하위 문서의 일부이므로 $getField에는 명시적인 fieldinput 매개 변수가 필요합니다.

  • $getField는 필드 이름에 달러 기호($)가 있기 때문에 $literal을 사용하여 '$small'을 평가합니다.

출력 예시:

[
{
_id: 3,
item: 'sun dress',
'price.usd': 199.99,
quantity: { '$large': 45, '$medium': 40, '$small': 5 }
}
]

돌아가기

$function

이 페이지의 내용