Trong MongoDB, $abs
toán tử đường ống tổng hợp trả về giá trị tuyệt đối của một số.
Ví dụ
Giả sử chúng ta có một tập hợp được gọi là data
với tài liệu sau:
{ "_id" : 1, "a" : 20, "b" : -20 }
Chúng ta có thể sử dụng $abs
toán tử để trả về các giá trị tuyệt đối của a
và b
các lĩnh vực.
db.data.aggregate(
[
{ $project: {
_id: 0,
a: { $abs: [ "$a" ] },
b: { $abs: [ "$b" ] }
}
}
]
)
Kết quả:
{ "a" : 20, "b" : 20 }
Giá trị tuyệt đối không bao gồm bất kỳ dấu hiệu nào và vì vậy chúng ta có thể thấy dấu âm đã bị xóa khỏi b
giá trị.
Bạn có thể coi giá trị tuyệt đối của một số là khoảng cách, trên trục số, của số đó từ 0.
Giá trị rỗng
Giá trị rỗng trả về null
khi sử dụng $abs
nhà điều hành.
Giả sử chúng ta thêm tài liệu sau vào bộ sưu tập của mình:
{ "_id" : 2, "a" : 0, "b" : null }
Hãy chạy $abs
toán tử đối với tài liệu đó:
db.data.aggregate(
[
{ $match: { _id: 2 } },
{ $project: {
_id: 0,
a: { $abs: [ "$a" ] },
b: { $abs: [ "$b" ] }
}
}
]
)
Kết quả:
{ "a" : 0, "b" : null }
Chúng ta có thể thấy rằng b
được giải quyết thành null
.
Chúng ta cũng có thể thấy rằng 0
giải quyết thành 0
.
Giá trị NaN
Nếu đối số phân giải thành NaN
, $abs
trả về NaN
.
Ví dụ:
db.data.aggregate(
[
{ $match: { _id: 2 } },
{ $project: {
_id: 0,
a: { $abs: [ "$a" ] },
b: { $abs: [ 1 * "g" ] }
}
}
]
)
Kết quả:
{ "a" : 0, "b" : NaN }
Trong trường hợp này, tôi đã cố gắng nhiều một số với một chuỗi, dẫn đến NaN
được trả lại.
Các trường không tồn tại
Nếu $abs
toán tử được áp dụng cho một trường không tồn tại, null
được trả lại.
Ví dụ:
db.data.aggregate(
[
{ $match: { _id: 2 } },
{ $project: {
_id: 0,
c: { $abs: [ "$c" ] }
}
}
]
)
Kết quả:
{ "c" : null }
Kết hợp với các nhà khai thác khác
Trong ví dụ này, tôi kết hợp $abs
với $subtract
để tính toán mức độ chênh lệch giữa các trường a
và b
:
db.data.aggregate(
[
{ $match: { _id: 1 } },
{ $project: {
_id: 0,
a: 1,
b: 1,
result: {
$abs: {
$subtract: [ "$a", "$b" ]
}
}
}
}
]
)
Kết quả:
{ "a" : 20, "b" : -20, "result" : 40 }