Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MongoDB

Chuyển đổi String sang ObjectId trong MongoDB

Từ MongoDB 4.0, toán tử $toObjectId cho phép chuyển đổi chuỗi 24 ký tự hex thành ObjectId trong pipeline aggregate.

Dữ liệu mẫu

> db.demo95.insertOne({"Id":"5ab9cbe531c2ab715d42129a"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e2d5ef5b8903cdd865577ac") }

Truy vấn aggregate chuyển đổi

> db.demo95.aggregate([
    { "$addFields": { "d": { "$toObjectId": "$Id" } }}
]);

Kết quả

{ "_id" : ObjectId("5e2d5ef5b8903cdd865577ac"), "Id" : "5ab9cbe531c2ab715d42129a", "d" : ObjectId("5ab9cbe531c2ab715d42129a") }

Lưu ý:

  • $toObjectId yêu cầu chuỗi đúng định dạng 24 ký tự hex (12 bytes)
  • Nếu chuỗi không hợp lệ, sẽ ném lỗi. Dùng $convert với onError để xử lý an toàn
  • Phiên bản cũ (< 4.0): Dùng $oid trong driver hoặc xử lý ở application layer
  • Có thể dùng trong $match để join collection bằng _id dạng string

Ví dụ an toàn với $convert:

db.demo95.aggregate([
    { $addFields: {
        d: { $convert: { input: "$Id", to: "objectId", onError: null } }
    }}
]);