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 ý:
$toObjectIdyê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
$convertvớionErrorđể xử lý an toàn - Phiên bản cũ (< 4.0): Dùng
$oidtrong 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 } }
}}
]);