문서 메뉴

문서 홈애플리케이션 개발MongoDB 매뉴얼

$subtract (애그리게이션)

이 페이지의 내용

  • 정의
  • 행동
  • 예제
$subtract

두 숫자를 빼서 차이를 반환하거나, 두 날짜를 빼서 밀리초 단위의 차이를 반환하거나, 날짜와 밀리초 단위의 숫자를 빼서 결과 날짜를 반환합니다.

$subtract 표현식의 구문은 다음과 같습니다.

{ $subtract: [ <expression1>, <expression2> ] }

두 번째 인수는 첫 번째 인수에서 뺍니다.

인수는 숫자 및/또는 날짜로 해석되는 한 모든 인수는 유효한 표현식이 될 수 있습니다. 날짜에서 숫자를 빼려면 날짜가 첫 번째 인수여야 합니다. 표현식에 대한 자세한 내용은 표현식 연산자를참조하세요.

MongoDB 5.0부터 결과는 해당 유형으로 정확하게 표현될 수 없는 경우를 제외하고는 입력과 동일한 유형을 갖게 됩니다. 이런 경우:

  • 결과가 64비트 정수로 표현 가능한 경우 32비트 정수는 64비트 정수로 변환됩니다.

  • 결과가 64비트 정수로 표현될 수 없는 경우 32비트 정수는 double로 변환됩니다.

  • 결과를 64비트 정수로 표현할 수 없는 경우 64비트 정수는 double로 변환됩니다.

다음 문서가 포함된 sales collection을 생각해 보세요.

db.sales.insertMany([
{ "_id" : 1, "item" : "abc", "price" : 10, "fee" : 2, "discount" : 5, "date" : ISODate("2014-03-01T08:00:00Z") },
{ "_id" : 2, "item" : "jkl", "price" : 20, "fee" : 1, "discount" : 2, "date" : ISODate("2014-03-01T09:00:00Z") }
])

다음 애그리게이션에서는 $subtract 표현식을 사용하여 pricefee 의 소계에서 discount 를 빼서 total 를 계산합니다.

db.sales.aggregate( [ { $project: { item: 1, total: { $subtract: [ { $add: [ "$price", "$fee" ] }, "$discount" ] } } } ] )

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

{ "_id" : 1, "item" : "abc", "total" : 7 }
{ "_id" : 2, "item" : "jkl", "total" : 19 }

다음 애그리게이션은 $subtract 표현식을 사용하여 시스템 NOW ( 4 2 부터 사용 가능)을 통해 현재 날짜에서 $date 를 빼고 그 차이를 밀리초 단위로 반환합니다.

db.sales.aggregate( [ { $project: { item: 1, dateDifference: { $subtract: [ "$$NOW", "$date" ] } } } ] )

또는 현재 날짜에 Date()를 사용할 수 있습니다.

db.sales.aggregate( [ { $project: { item: 1, dateDifference: { $subtract: [ new Date(), "$date" ] } } } ] )

두 작업 모두 다음과 유사한 문서를 반환합니다:

{ "_id" : 1, "item" : "abc", "dateDifference" : NumberLong("186136746187") }
{ "_id" : 2, "item" : "jkl", "dateDifference" : NumberLong("186133146187") }

다음 애그리게이션은 $subtract 표현식을 사용하여 "$date" 필드에서 5 * 60 * 1000 밀리초(5 분) 를 뺍니다.

db.sales.aggregate( [ { $project: { item: 1, dateDifference: { $subtract: [ "$date", 5 * 60 * 1000 ] } } } ] )

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

{ "_id" : 1, "item" : "abc", "dateDifference" : ISODate("2014-03-01T07:55:00Z") }
{ "_id" : 2, "item" : "jkl", "dateDifference" : ISODate("2014-03-01T08:55:00Z") }
← $substrCP (애그리게이션)

이 페이지의 내용