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 }