2013-07-10 37 views
8

Tôi đang sử dụng khuôn khổ hợp MongoDB và cần phải thực hiện giá trị tuyệt đối của một trường số tiền, mà tôi sử dụng trong cả hai phần dự án và phần nhóm, ví dụ:giá trị tuyệt đối với khuôn khổ MongoDB hợp

'$project' => { 
      'amount' => 1, 
      '_id' => 0 
     } 

....

'$group' => { 
     'total' => {'$sum' => '$amount'} 
    } 

Làm cách nào để bạn lấy giá trị tuyệt đối của trường 'số tiền' trong trường hợp này? Tôi không thể tìm thấy nó trong tài liệu (có thể nó không có sẵn?)

Trả lời

12

Nó không có sẵn trực tiếp, nhưng bạn có thể làm điều đó bằng cách sử dụng toán tử $cond$subtract trong phạm vi $project như thế này (dưới dạng đối tượng JavaScript) :

{ $project: { 
    amount: { 
    $cond: [ 
     { $lt: ['$amount', 0] }, 
     { $subtract: [0, '$amount'] }, 
     '$amount' 
    ] 
}}} 

Vì vậy, nếu amount < 0, sau đó 0 - amount được sử dụng, nếu không amount được sử dụng trực tiếp.

CẬP NHẬT

Tính đến 3.2 phát hành MongoDB, bạn có thể sử dụng toán tử biểu $abs tập hợp mới để làm điều này trực tiếp:

{ $project: { amount: { $abs: '$amount' } } 
+0

Perfect! Cảm ơn. – Mellop

+2

Hoặc, thay vào đó, bạn sẽ có thể '$ nhân' bằng '-1':' {$ nhân: [-1, 'số tiền $']} ' – WiredPrairie

+0

@AshutoshPriyadarshy ((-1) * (- 1))/(- 1) vẫn là -1, do đó không chính xác. – joao

Các vấn đề liên quan