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

MongoDB $ pow

Trong MongoDB, $pow toán tử đường ống tổng hợp tăng một số thành số mũ được chỉ định và trả về kết quả

$pow chấp nhận hai biểu thức, được cung cấp trong một mảng. Cái đầu tiên là số, và cái thứ hai là số mũ. Cả hai đều có thể là bất kỳ biểu thức hợp lệ nào, miễn là chúng phân giải thành một số.

Ví dụ

Giả sử chúng ta có một bộ sưu tập được gọi là test với các tài liệu sau:

{ "_id" : 1, "data" : 10 }
{ "_id" : 2, "data" : -3 }
{ "_id" : 3, "data" : 0 }
{ "_id" : 4, "data" : null }

Chúng ta có thể sử dụng $pow toán tử để nâng cao dữ liệu data trường bởi một số mũ được chỉ định:

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

Kết quả:

{ "result" : 1000 }
{ "result" : -27 }
{ "result" : 0 }
{ "result" : null }

Trong trường hợp này, tôi đã sử dụng data trường dưới dạng số và 3 dưới dạng số mũ. Do đó, mỗi tài liệu có data trường được nâng lên bởi lũy thừa của 3.

Chúng ta có thể thấy rằng null giá trị trả về null .

Kết quả thường cùng kiểu với đầu vào. Tuy nhiên, có những trường hợp ngoại lệ cho quy tắc này. Cụ thể:

  • Một số nguyên 32 bit sẽ được chuyển đổi thành số nguyên 64 bit nếu kết quả có thể biểu diễn dưới dạng số nguyên 64 bit.
  • Một số nguyên 32 bit sẽ được chuyển đổi thành số kép nếu kết quả không thể biểu diễn dưới dạng số nguyên 64 bit.
  • Một số nguyên 64 bit sẽ được chuyển đổi thành gấp đôi nếu kết quả không thể biểu diễn dưới dạng số nguyên 64 bit.

Số mũ âm

Bạn không thể tăng số 0 (0 ) thành số mũ âm.

Ví dụ:

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

Kết quả:

uncaught exception: Error: command failed: {
	"ok" : 0,
	"errmsg" : "$pow cannot take a base of 0 and a negative exponent",
	"code" : 28764,
	"codeName" : "Location28764"
} : 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ỗi nói rõ rằng “ $ pow không thể nhận cơ số 0 và số mũ âm “.

Tuy nhiên, nếu chúng tôi loại trừ tài liệu 3, chúng tôi không còn gặp lỗi:

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

Kết quả:

{ "_id" : 1, "result" : 0.001 }
{ "_id" : 2, "result" : -0.037037037037037035 }
{ "_id" : 4, "result" : null }

Giá trị NaN

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

Ví dụ:

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

Kết quả:

{ "result" : NaN }
{ "result" : NaN }
{ "result" : NaN }
{ "result" : NaN }

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

Nếu $pow 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(
  [
    { $project: { 
        _id: 0,
        result: { $pow: [ "$beer", 3 ] }
      }
    }
  ]
)

Kết quả:

{ "result" : null }
{ "result" : null }
{ "result" : null }
{ "result" : null }

Null Exponent

Chúng tôi đã thấy rằng một null giá trị trả về null . Điều này cũng đúng khi cung cấp null dưới dạng số mũ.

Ví dụ:

db.test.aggregate(
  [
    { $project: { 
        _id: 0,
        result: { $pow: [ "$data", null ] }
      }
    }
  ]
)

Kết quả:

{ "result" : null }
{ "result" : null }
{ "result" : null }
{ "result" : null }

  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Cân nhắc khi quản lý MongoDB

  2. Làm cách nào để thay đổi tất cả các phần tử mảng trong tài liệu mongodb thành một giá trị nhất định?

  3. MongoDB:ngoại lệ trong initAndListen:20 Đã cố tạo tệp khóa trên thư mục chỉ đọc:/ data / db, chấm dứt

  4. Lỗi giao dịch PyMongo:Số giao dịch chỉ được phép trên một thành viên hoặc mongos đặt bản sao

  5. Sáu thành phần quan trọng của quản trị dữ liệu thành công