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

마지막(배열 연산자)

이 페이지의 내용

  • 정의
  • 구문
  • 행동
  • 예제
  • 다음도 참조하세요.
$last

버전 4.4에 추가되었습니다.

배열의 마지막 요소를 반환합니다.

참고

명확화

이 페이지에서는 $last 배열 연산자에 대해 설명합니다. $last 집계 누산기에 대해서는 $last (aggregation accumulator) 을(를) 참조하세요.

$last 연산자의 구문은 다음과 같습니다.

{ $last: <expression> }

<expression> 는 배열, null 또는 누락으로 해석되는 한 모든 유효한 표현식 일 수 있습니다. 표현식에 대한 자세한 내용은 표현식을 참조하세요 .

$last 연산자는 다음 $arrayElemAt 표현식의 별칭입니다.

{ $arrayElemAt: [ <array expression>, -1 ] }

$last 의 유효한 피연산자는 배열, null 또는 누락된 것으로 해석되어야 합니다.

  • 피연산자가 비어 있지 않은 배열로 해석되는 경우 $last 는 배열의 마지막 요소를 반환합니다.

  • 피연산자가 빈 배열 [] 로 해석되는 경우 $last 는 값을 반환하지 않습니다.

  • 피연산자가 null이거나 누락된 경우 $last 은 null을 반환합니다.

예를 들어, 다음 문서를 사용하여 테스트 collection example1 을 만듭니다.

db.example1.insertMany([
{ "_id" : 1, "x" : [ 1, 2, 3 ] }, // Non-empty array
{ "_id" : 2, "x" : [ [ ] ] }, // Non-empty array
{ "_id" : 3, "x" : [ null ] }, // Non-empty array
{ "_id" : 4, "x" : [ ] }, // Empty array
{ "_id" : 5, "x" : null }, // Is null
{ "_id" : 6 } // Is Missing
])

그런 다음 다음 항목은 x 필드에 $last 연산자를 적용하여 값이 파생된 새 필드 lastElem 를 추가합니다.

db.example1.aggregate([
{ $addFields: { lastElem: { $last: "$x" } } }
])

연산자는 다음 문서를 반환합니다.

{ "_id" : 1, "x" : [ 1, 2, 3 ], "lastElem" : 3 }
{ "_id" : 2, "x" : [ [ ] ], "lastElem" : [ ] }
{ "_id" : 3, "x" : [ null ], "lastElem" : null }
{ "_id" : 4, "x" : [ ] } // No output
{ "_id" : 5, "x" : null, "lastElem" : null }
{ "_id" : 6, "lastElem" : null }

피연산자가 배열, null 또는 누락으로 해석되지 않으면 애그리게이션 연산 전체에 오류가 발생합니다.

예를 들어, 다음 문서를 사용하여 테스트 collection example2 을 만듭니다.

db.example2.insertMany([
{ "_id" : 1, "x" : [ 1, 2, 3 ] },
{ "_id" : 2, "x" : 2 }, // x is not an array/null or missing
])

그런 다음 { "_id" : 2, "x" : 2 } 문서로 인해 다음 애그리게이션 작업에서 오류를 반환합니다.

db.example2.aggregate( { $addFields: { lastElem: { $last: "$x" } } } )

즉, 이 연산은 다음을 반환합니다.

2020-01-20T21:12:26.713-05:00 E QUERY [js] uncaught exception: Error: command failed: {
"ok" : 0,
"errmsg" : "$last's argument must be an array, but is double",
"code" : 28689,
"codeName" : "Location28689"
} : aggregate failed :

다음 문서를 사용하여 샘플 collection runninglog 을 만듭니다.

db.runninglog.insertMany([
{ "_id" : 1, "team" : "Anteater", log: [ { run: 1, distance: 8 }, { run2: 2, distance: 7.5 }, { run: 3, distance: 9.2 } ] },
{ "_id" : 2, "team" : "Bears", log: [ { run: 1, distance: 18 }, { run2: 2, distance: 17 }, { run: 3, distance: 16 } ] },
{ "_id" : 3, "team" : "Cobras", log: [ { run: 1, distance: 2 } ] }
])

다음 애그리게이션은 log 배열의 $first$last 연산자를 사용하여 첫 번째 실행과 마지막 실행에 대한 정보를 검색합니다.

db.runninglog.aggregate([
{ $addFields: { firstrun: { $first: "$log" }, lastrun: { $last: "$log" } } }
])

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

{ "_id" : 1, "team" : "Anteater", "log" : [ { "run" : 1, "distance" : 8 }, { "run2" : 2, "distance" : 7.5 }, { "run" : 3, "distance" : 9.2 } ],
"firstrun" : { "run" : 1, "distance" : 8 }, "lastrun" : { "run" : 3, "distance" : 9.2 } }
{ "_id" : 2, "team" : "Bears", "log" : [ { "run" : 1, "distance" : 18 }, { "run2" : 2, "distance" : 17 }, { "run" : 3, "distance" : 16 } ],
"firstrun" : { "run" : 1, "distance" : 18 }, "lastrun" : { "run" : 3, "distance" : 16 } }
{ "_id" : 3, "team" : "Cobras", "log" : [ { "run" : 1, "distance" : 2 } ],
"firstrun" : { "run" : 1, "distance" : 2 }, "lastrun" : { "run" : 1, "distance" : 2 } }

첫 번째 거리와 마지막 거리 사이의 변화를 계산하기 위해 다음 연산에서는 $cond$size 연산자를 사용하여 차이를 계산합니다(즉, $subtract) log 배열에 요소가 두 개 이상 있는 경우 두 거리:

db.runninglog.aggregate([
{ $addFields: { firstrun: { $first: "$log" }, lastrun: { $last: "$log" } } },
{ $project: { team: 1, progress:
{
$cond: {
if: { $gt: [ { $size:"$log" }, 1 ] } ,
then: { $subtract: [ "$lastrun.distance", "$firstrun.distance"] },
else: "Not enough data." }
}
}}
])

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

{ "_id" : 1, "team" : "Anteater", "progress" : 1.1999999999999993 }
{ "_id" : 2, "team" : "Bears", "progress" : -2 }
{ "_id" : 3, "team" : "Cobras", "progress" : "Not enough data." }

기본적으로 mongosh 은(는) 숫자에 64비트 부동 소수점 더블을 사용합니다. 정밀도를 향상시키려면 10진수128 를 대신 사용할 수 있습니다.

돌아가기

$lastN