MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

MongoDB $ atan2

Trong MongoDB, $atan2 toán tử đường ống tổng hợp trả về arctangent (tiếp tuyến nghịch đảo) của một giá trị chia cho giá trị khác.

Bạn cung cấp hai giá trị trong một mảng. Mỗi một trong hai giá trị được cung cấp cho $atan2 có thể là bất kỳ biểu thức hợp lệ nào phân giải thành một số.

Giá trị trả về tính bằng radian.

$atan2 toán tử đã được giới thiệu trong MongoDB 4.2.

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":2, "b":3} 

Chúng ta có thể sử dụng $atan2 toán tử để trả về arctangent của a trường được chia cho b lĩnh vực:

 db.data.aggregate(
  [
    { $match: { _id: 1 } },
    { $project: { 
        _id: 0,
        arctangent: { $atan2: [ "$a", "$b" ] }
      }
    }
  ]
) 

Kết quả:

 {"arctangent":0.5880026035475675} 

Chuyển đổi sang độ

Như đã đề cập, $atan2 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.data.aggregate(
  [
    { $match: { _id: 1 } },
    { $project: { 
        _id: 0,
        radians: { $atan2: [ "$a", "$b" ] },
        degrees: { $radiansToDegrees: { $atan2: [ "$a", "$b" ] } }
      }
    }
  ]
) 

Kết quả:

 {"radian":0,5880026035475675, "độ":33,690067525979785} 

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ị thập phân 128 bit

Theo mặc định, $atan2 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.

Trường hợp này xảy ra ngay cả khi chỉ một trong các biểu thức là số thập phân 128 bit.

Giả sử chúng tôi thêm các tài liệu sau vào bộ sưu tập của mình:

 { "_id" : 2, "a" : NumberDecimal("1.1301023541559787031443874490659"), "b" : NumberDecimal("2.1301023541559787031443874490659") }
{ "_id" : 3, "a" : 2, "b" : NumberDecimal("2.1301023541559787031443874490659") }
{ "_id" : 4, "a" : NumberDecimal("2.1301023541559787031443874490659"), "b" : 2 } 

Hãy chạy $atan2 toán tử chống lại các tài liệu đó:

 db.data.aggregate(
  [
    { $match: { _id: { $in: [ 2, 3, 4 ] } } },
    { $project: { 
        _id: 0,
        arctangent: { $atan2: [ "$a", "$b" ] }
      }
    }
  ]
) 

Kết quả:

 {"arctangent":NumberDecimal ("0,4877792766738730791507215461936449")} {"arctangent":NumberDecimal ("0,7539075768401526572881006364456838")} {"arctangent":NumberDecimal ("0,816883961943" 

Trong mọi trường hợp, đầu ra là số thập phân 128 bit.

Giá trị rỗng

Giá trị rỗng trả về null khi sử dụng $atan2 nhà điều hành. Điều này đúng ngay cả khi biểu thức duy nhất là null .

Giả sử chúng tôi thêm các tài liệu sau vào bộ sưu tập của mình:

 {"_id":5, "a":null, "b":2} {"_id":6, "a":2, "b":null} {"_id":7, "a ":2," null ":null} 

Hãy chạy $atan2 toán tử chống lại các tài liệu đó:

 db.data.aggregate(
  [
    { $match: { _id: { $in: [ 5, 6, 7 ] } } },
    { $project: { 
        _id: 0,
        arctangent: { $atan2: [ "$a", "$b" ] }
      }
    }
  ]
) 

Kết quả:

 {"arctangent":null} {"arctangent":null} {"arctangent":null} 

Chúng ta có thể thấy rằng kết quả là null trong tất cả trường hợp.

Giá trị NaN

Nếu đối số phân giải thành NaN , $atan2 trả về NaN .

Ví dụ:

 db.data.aggregate(
  [
    { $match: { _id: { $in: [ 2, 3, 4 ] } } },
    { $project: { 
        _id: 0,
        arctangent: { $atan2: [ "$a" * 1, "$b" ] }
      }
    }
  ]
) 

Kết quả:

 {"arctangent":NumberDecimal ("NaN")} {"arctangent":NumberDecimal ("NaN")} {"arctangent":NaN} 

Hãy thay đổi nó một chút, để chúng ta nhân trường b thay vì trường a .

 db.data.aggregate(
  [
    { $match: { _id: { $in: [ 2, 3, 4 ] } } },
    { $project: { 
        _id: 0,
        arctangent: { $atan2: [ "$a", "$b" * 1 ] }
      }
    }
  ]
) 

Kết quả:

 {"arctangent":NumberDecimal ("NaN")} {"arctangent":NaN} {"arctangent":NumberDecimal ("NaN")} 

Và bây giờ chúng ta hãy nhân cả hai trường:

 db.data.aggregate(
  [
    { $match: { _id: { $in: [ 2, 3, 4 ] } } },
    { $project: { 
        _id: 0,
        arctangent: { $atan2: [ "$a" * 1, "$b" * 1 ] }
      }
    }
  ]
) 

Kết quả:

 {"arctangent":NaN} {"arctangent":NaN} {"arctangent":NaN} 

Các trường không tồn tại

Nếu $atan2 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: 1 } },
    { $project: { 
        _id: 0,
        result: { $atan2: [ "$a", "$name" ] }
      }
    }
  ]
) 

Kết quả:

 {"kết quả":null} 

  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB:Làm thế nào để đếm số lượng khóa trong một tài liệu?

  2. Mongo Aggregation:mảng $ group và $ project thành đối tượng để đếm

  3. Ứng dụng Heroku gặp sự cố sau khi MongoDB cập nhật lên 3.0

  4. Cách sử dụng Spring để kết nối với MongoDB yêu cầu xác thực

  5. MongoDB $ setIntersection