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

MongoDB $ tan

Trong MongoDB, $tan toán tử đường ống tổng hợp trả về tiếp tuyến của một giá trị được đo bằng radian.

$tan 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ố.

$tan 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" : 2 }

Chúng ta có thể sử dụng $tan toán tử để trả về tiếp tuyến của data lĩnh vực:

db.test.aggregate(
  [
    { $match: { _id: 1 } },
    { $project: { 
        _id: 0,
        tangent: { $tan: "$data" }
      }
    }
  ]
)

Kết quả:

{ "tangent" : -2.185039863261519 }

Chuyển đổi sang Radian

Như đã đề cập, $tan trả về tang của một giá trị được đo bằng radian. Nếu giá trị tính bằng độ, bạn có thể sử dụng $degreesToRadians để chuyển đổi nó thành radian.

Ví dụ:

db.test.aggregate(
  [
    { $match: { _id: 1 } },
    { $project: { 
        _id: 0,
        tangent: { $degreesToRadians: { $tan: "$data" } }
      }
    }
  ]
)

Kết quả:

{ "tangent" : -0.038136139901240186 }

Giá trị thập phân 128 bit

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

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, "data" : NumberDecimal("2.1301023541559787031443874490659") }

Hãy chạy $tan toán tử đối với tài liệu đó:

db.test.aggregate(
  [
    { $match: { _id: 2 } },
    { $project: { 
        _id: 0,
        tangent: { $tan: "$data" }
      }
    }
  ]
)

Kết quả:

{ "tangent" : NumberDecimal("-1.597486946407534452195921861435753") }

Đầ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 $tan 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 $tan toán tử đối với tài liệu đó:

db.test.aggregate(
  [
    { $match: { _id: 3 } },
    { $project: { 
        _id: 0,
        result: { $tan: "$data" }
      }
    }
  ]
)

Kết quả:

{ "result" : 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 , $tan trả về NaN .

Ví dụ:

db.test.aggregate(
  [
    { $match: { _id: 1 } },
    { $project: { 
        _id: 0,
        result: { $tan: 1 * "$data" }
      }
    }
  ]
)

Kết quả:

{ "result" : NaN }

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

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

Kết quả:

{ "result" : null }

Vô cực

Cung cấp Infinity hoặc -Infinity trả về một lỗi.

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

{ "_id" : 4, "data" : Infinity }
{ "_id" : 5, "data" : -Infinity }

Hãy áp dụng $tan đối với các tài liệu này:

db.test.aggregate(
  [
    { $match: { _id: { $in: [ 4, 5 ] } } },
    { $project: { 
        tangent: { $tan: "$data" }
      }
    }
  ]
)

Kết quả:

uncaught exception: Error: command failed: {
	"ok" : 0,
	"errmsg" : "cannot apply $tan to inf, value must in (-inf,inf)",
	"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

Trong trường hợp này, $tan chỉ đến được tài liệu đầu tiên (tài liệu 4) trước khi xảy ra lỗi. Chúng tôi biết điều này vì thông báo lỗi cho biết rằng nó đang cố gắng áp dụng $tan thành inf (Infinity ).

Nếu chúng tôi xóa tài liệu 4 khỏi bộ lọc truy vấn, chúng tôi có thể thấy rằng tài liệu tiến triển thành tài liệu 5 và trả về cùng một lỗi.

db.test.aggregate(
  [
    { $match: { _id: { $in: [ 5 ] } } },
    { $project: { 
        tangent: { $tan: "$data" }
      }
    }
  ]
)

Kết quả:

uncaught exception: Error: command failed: {
	"ok" : 0,
	"errmsg" : "cannot apply $tan to -inf, value must in (-inf,inf)",
	"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ần này lỗi cho thấy rằng nó đang cố gắng áp dụng $tan to -inf (-Infinity ).


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Làm cách nào để sử dụng biến regex trong truy vấn cho MongoDB

  2. Mongodb - bao gồm hoặc loại trừ các phần tử nhất định với trình điều khiển c #

  3. Xác thực người dùng bình

  4. Mongoid:tìm qua Mảng id

  5. MongoDB $ exp