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

MongoDB $ cos

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

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

$cos 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" : 3 }

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

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

Kết quả:

{ "cosine" : -0.9899924966004454 }

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

Khi Biểu thức ở Độ

Như đã đề cập, $cos chấp nhận biểu thức của nó bằng radian. Bạn có thể sử dụng $degreesToRadians toán tử để chuyển đổi bất kỳ giá trị nào từ độ sang radian.

Ví dụ:

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

Kết quả:

{ "cosine" : -0.017278628635716543 }

Giá trị rỗng

Giá trị rỗng trả về null khi sử dụng $cos 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 $cos toán tử đối với tài liệu đó:

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

Kết quả:

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

Ví dụ:

db.test.aggregate(
  [
    { $match: { _id: 3 } },
    { $project: { 
        _id: 0,
        cosine: { $cos: 1 * "string" }
      }
    }
  ]
)

Kết quả:

{ "cosine" : 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 , $cos 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 $cos so với trường dữ liệu:

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

Kết quả:

uncaught exception: Error: command failed: {
	"ok" : 0,
	"errmsg" : "cannot apply $cos 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à lỗi tôi gặp phải trong mongo vỏ.

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

Nếu $cos 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,
        cosine: { $cos: "$carrots" }
      }
    }
  ]
)

Kết quả:

{ "cosine" : null }

128-bit Decimal

Như đã đề cập, nếu biểu thức được cung cấp cho $cos 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:

{ "_id" : 5, "data" : NumberDecimal("1.1301023541559787031443874490659") }

Đây là những gì sẽ xảy ra khi chúng tôi chạy điều đó thông qua $cos nhà điều hành:

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

Kết quả:

{ "cosine" : NumberDecimal("0.4265672353490945266548815934449746") }

Đầu ra là số thập phân 128 bit.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. cách hiển thị truy vấn trong khi sử dụng chú thích truy vấn với MongoRepository với dữ liệu mùa xuân

  2. 'process.nextTick (function () {throw err;})' - Undefined không phải là một hàm (mongodb / mongoose)

  3. Chuyển hướng đầu ra của truy vấn mongo sang tệp csv

  4. Cách trả về giá trị duy nhất của một trường trong mongodb

  5. Làm thế nào để phát trực tuyến Kết quả truy vấn MongoDB với nodejs?