Trong MongoDB, $acos
toán tử đường ống tổng hợp trả về arccosine (nghịch đảo cosine) của một giá trị, được đo bằng radian.
$acos
chấp nhận bất kỳ biểu thức hợp lệ nào phân giải thành một số giữa -1
và 1
.
$acos
toán tử đã được giới thiệu trong MongoDB 4.2.
Ví dụ
Giả sử chúng ta có một bộ sưu tập được gọi là test
với tài liệu sau:
{ "_id" : 1, "data" : 0.5 }
Chúng ta có thể sử dụng $acos
toán tử để trả về arccosine của data
lĩnh vực:
db.test.aggregate(
[
{ $project: {
_id: 0,
arccosine: { $acos: "$data" }
}
}
]
)
Kết quả:
{ "arccosine" : 1.0471975511965976 }
Theo mặc định, $acos
toán tử trả về các giá trị dưới dạng double
, nhưng nó cũng có thể trả về giá trị dưới dạng số thập phân 128 bit miễn là biểu thức phân giải thành giá trị thập phân 128 bit.
Pi
Cung cấp -1 giải quyết cho hằng số toán học pi (π).
Giả sử chúng ta thêm tài liệu sau vào bộ sưu tập của mình, tài liệu này chứa giá trị dữ liệu là -1
.
{ "_id" : 2, "data" : -1 }
Bây giờ chúng ta hãy chạy $acos
toán tử đối với trường đó:
db.test.aggregate(
[
{ $match: { _id: 2 } },
{ $project: {
_id: 0,
arccosine: { $acos: "$data" }
}
}
]
)
Kết quả:
{ "arccosine" : 3.141592653589793 }
Kết quả này là từ π đến 15 chữ số thập phân.
Chuyển đổi sang độ
Như đã đề cập, $acos
trả về kết quả của nó theo đơn vị radian. Bạn có thể sử dụng $radiansToDegrees
nếu bạn muốn kết quả bằng độ.
Ví dụ:
db.test.aggregate(
[
{ $match: { _id: 2 } },
{ $project: {
_id: 0,
radians: { $acos: "$data" },
degrees: { $radiansToDegrees: { $acos: "$data" } }
}
}
]
)
Kết quả:
{ "radians" : 3.141592653589793, "degrees" : 180 }
Trong ví dụ này, trường đầu tiên trình bày kết quả bằng radian và trường thứ hai trình bày kết quả bằng độ.
Giá trị rỗng
Giá trị rỗng trả về null
khi sử dụng $acos
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" : 3, "data" : null }
Hãy chạy $acos
toán tử đối với tài liệu đó:
db.test.aggregate(
[
{ $match: { _id: 3 } },
{ $project: {
_id: 0,
arccosine: { $acos: "$data" }
}
}
]
)
Kết quả:
{ "arccosine" : null }
Chúng ta có thể thấy rằng kết quả là null
.
Giá trị NaN
Nếu đối số phân giải thành NaN
, $acos
trả về NaN
.
Ví dụ:
db.test.aggregate(
[
{ $match: { _id: 3 } },
{ $project: {
_id: 0,
arccosine: { $acos: 1 * "oops!" }
}
}
]
)
Kết quả:
{ "arccosine" : 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.
Vô cực
Nếu đối số phân giải thành Infinity
hoặc -Infinity
, $acos
toán tử trả về một lỗi.
Giả sử chúng ta thêm tài liệu sau vào bộ sưu tập của mình:
{ "_id" : 4, "data" : Infinity }
Hãy chạy $acos
so với trường dữ liệu:
db.test.aggregate(
[
{ $match: { _id: 4 } },
{ $project: {
_id: 0,
arccosine: { $acos: "$data" }
}
}
]
)
Kết quả:
uncaught exception: Error: command failed: { "ok" : 0, "errmsg" : "cannot apply $acos to inf, value must in [-1,1]", "code" : 50989, "codeName" : "Location50989" } : aggregate failed : [email protected]/mongo/shell/utils.js:25:13 [email protected]/mongo/shell/assert.js:18:14 [email protected]/mongo/shell/assert.js:618:17 [email protected]/mongo/shell/assert.js:708:16 [email protected]/mongo/shell/db.js:266:5 [email protected]/mongo/shell/collection.js:1046:12 @(shell):1:1
Đó là lỗi tôi gặp phải trong mongo
khi chạy mã đó.
Các trường không tồn tại
Nếu $acos
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.test.aggregate(
[
{ $match: { _id: 4 } },
{ $project: {
_id: 0,
arccosine: { $acos: "$oops" }
}
}
]
)
Kết quả:
{ "arccosine" : null }
Giá trị ngoài phạm vi
Cung cấp giá trị nằm ngoài phạm vi cho $acos
sẽ dẫn đến lỗi.
Giả sử chúng ta thêm tài liệu sau vào bộ sưu tập:
{ "_id" : 5, "data" : 2 }
Bây giờ chúng ta hãy chạy $acos
chống lại dữ liệu data
lĩnh vực:
db.test.aggregate(
[
{ $match: { _id: 5 } },
{ $project: {
_id: 0,
radians: { $acos: "$data" }
}
}
]
)
Kết quả:
uncaught exception: Error: command failed: { "ok" : 0, "errmsg" : "cannot apply $acos to 2, value must in [-1,1]", "code" : 50989, "codeName" : "Location50989" } : aggregate failed : [email protected]/mongo/shell/utils.js:25:13 [email protected]/mongo/shell/assert.js:18:14 [email protected]/mongo/shell/assert.js:618:17 [email protected]/mongo/shell/assert.js:708:16 [email protected]/mongo/shell/db.js:266:5 [email protected]/mongo/shell/collection.js:1046:12 @(shell):1:1
Như thông báo lỗi ám chỉ đến, giá trị phải nằm trong khoảng -1
và 1
.