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

MongoDB $ toObjectId

Từ MongoDB 4.0, bạn có thể sử dụng $toObjectId toán tử đường ống tổng hợp để chuyển đổi một chuỗi thành ObjectId.

Chuỗi phải là một chuỗi thập lục phân có độ dài 24.

Ví dụ

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

{ "_id" : 1, "bar" : "6008c9a5c8eb4369cf6ad9cc" } 

Chúng ta có thể sử dụng $toObjectId toán tử để chuyển đổi bar trường tới một ObjectId.

db.foo.aggregate(
  [
    {
      $project:
        { 
          _id: 0,
          bar: { $toObjectId: "$bar" }
        }
    }
  ]
).pretty()

Kết quả:

{ "bar" : ObjectId("6008c9a5c8eb4369cf6ad9cc") } 

Bây giờ chuỗi đã được chuyển đổi thành ObjectId như được chỉ định.

Lỗi

Ví dụ trên hoạt động vì chúng tôi đã cung cấp một chuỗi thập lục phân có độ dài 24 cho $toObjectId nhà điều hành.

Đây là điều sẽ xảy ra khi chúng tôi cung cấp giá trị không phải là chuỗi thập lục phân có độ dài 24:

db.foo.aggregate(
  [
    {
      $project:
        { 
          _id: 0,
          bar: { $toObjectId: "$_id" }
        }
    }
  ]
).pretty()

Kết quả:

Error: command failed: {
	"ok" : 0,
	"errmsg" : "Unsupported conversion from double to objectId in $convert with no onError value",
	"code" : 241,
	"codeName" : "ConversionFailure"
} : 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ày tạm dừng toàn bộ hoạt động tổng hợp và tạo ra một lỗi trông khó chịu.

Một phương pháp thay thế là sử dụng $convert toán tử thay vì $toObjectId . $convert cho phép bạn xử lý các lỗi mà không ảnh hưởng đến toàn bộ hoạt động tổng hợp.

$toObjectId toán tử tương đương với việc sử dụng $convert toán tử để chuyển đổi giá trị thành ObjectId.

Dưới đây là ví dụ tương tự bằng cách sử dụng $convert :

db.foo.aggregate(
  [
    {
      $project:
        { 
          _id: 0,
          result: 
          {
            $convert: { 
              input: "$_id", 
              to: "objectId",
              onError: "An error occurred",
              onNull: "Input was null or empty" 
            }
          }
        }
    }
  ]
)

Kết quả:

{ "result" : "An error occurred" } 

Sử dụng $convert cho phép chúng tôi chỉ định thông báo lỗi để sử dụng khi lỗi xảy ra và nó không làm tạm dừng toàn bộ hoạt động tổng hợp.

Xem MongoDB $convert để biết thêm ví dụ.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Liên kết &Tạo MongoDB tham gia bằng SQL:Phần 2

  2. Ngăn chặn đăng nhập trùng lặp với FOSUserBundle

  3. nhiều phiên bản của Mongo DB trên cùng một máy chủ

  4. DeprecationWarning:Nghe các sự kiện trên lớp Db đã không còn được dùng nữa và sẽ bị loại bỏ trong phiên bản chính tiếp theo

  5. PostgreSQL so với MongoDB