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

MongoDB $ asin

Trong MongoDB, $asin toán tử đường ống tổng hợp trả về arcsine (sin nghịch đảo) của một giá trị, được đo bằng radian.

$asin 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 -11 .

$asin 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 $asin toán tử để trả về arccosine của data lĩnh vực:

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

Kết quả:

{ "arcsine" : 0.5235987755982988 }

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

Chuyển đổi sang độ

Như đã đề cập, $asin 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: 1 } },
    { $project: { 
        _id: 0,
        radians: { $asin: "$data" },
        degrees: { $radiansToDegrees: { $asin: "$data" } }
      }
    }
  ]
)

Kết quả:

{ "radians" : 0.5235987755982988, "degrees" : 29.999999999999996 }

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

Nếu biểu thức được cung cấp cho $asin là số thập phân 128 bit, sau đó kết quả được trả về ở số 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("0.1301023541559787031443874490659") }

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

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

Kết quả:

{ "arcsine" : NumberDecimal("0.1304722105697547116336288178856500") }

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

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

Kết quả:

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

Ví dụ:

db.test.aggregate(
  [
    { $match: { _id: 3 } },
    { $project: { 
        _id: 0,
        arcsine: { $asin: 1 * "String" }
      }
    }
  ]
)

Kết quả:

{ "arcsine" : NaN }

Trong trường hợp này, biểu thức đã cố gắng nhân 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 , $asin 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 $asin so với trường dữ liệu:

db.test.aggregate(
  [
    { $match: { _id: 4 } },
    { $project: { 
        _id: 0,
        arcsine: { $asin: "$data" }
      }
    }
  ]
)

Kết quả:

uncaught exception: Error: command failed: {
	"ok" : 0,
	"errmsg" : "cannot apply $asin 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 $asin 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,
        arcsine: { $asin: "$wrong" }
      }
    }
  ]
)

Kết quả:

{ "arcsine" : null }

Giá trị ngoài phạm vi

Cung cấp giá trị nằm ngoài phạm vi cho $asin sẽ dẫn đến lỗi. Chúng tôi đã thấy điều gì sẽ xảy ra khi chúng tôi cung cấp Infinity tới $asin . Bây giờ chúng ta hãy sử dụng một giá trị thấp hơn cho Earth, chẳng hạn như 2 .

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 $asin chống lại dữ liệu data lĩnh vực:

db.test.aggregate(
  [
    { $match: { _id: 5 } },
    { $project: { 
        _id: 0,
        arcsine: { $asin: "$data" }
      }
    }
  ]
)

Kết quả:

uncaught exception: Error: command failed: {
	"ok" : 0,
	"errmsg" : "cannot apply $asin 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 cho biết, giá trị phải nằm trong khoảng -11 .


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. trả lại truy vấn dựa trên ngày

  2. Python và MongoDB:Kết nối với Cơ sở dữ liệu NoSQL

  3. MongoDB $ tuần

  4. Công dụng của Jade hoặc Handlebars khi viết ứng dụng AngularJs

  5. Tầm quan trọng ngày càng tăng của MongoDB trong lĩnh vực khoa học dữ liệu