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

Chuyển đổi ObjectId thành String trong MongoDB

Để chuyển ObjectId thành chuỗi String trong MongoDB, sử dụng toán tử $toString trong Aggregation Pipeline (từ phiên bản 4.0+).

Ví dụ minh họa

Tạo collection objectidToStringDemo:

> db.objectidToStringDemo.insertOne({ "UserName": "John" });
> db.objectidToStringDemo.insertOne({ "UserName": "Chris" });
> db.objectidToStringDemo.insertOne({ "UserName": "Larry" });
> db.objectidToStringDemo.insertOne({ "UserName": "Robert" });

Hiển thị dữ liệu gốc (ObjectId):

> db.objectidToStringDemo.find().pretty();

Kết quả:

{ "_id" : ObjectId("5c92b80036de59bd9de0639d"), "UserName" : "John" }
{ "_id" : ObjectId("5c92b80436de59bd9de0639e"), "UserName" : "Chris" }
{ "_id" : ObjectId("5c92b80936de59bd9de0639f"), "UserName" : "Larry" }
{ "_id" : ObjectId("5c92b81836de59bd9de063a0"), "UserName" : "Robert" }

Aggregation chuyển _id thành String

> db.objectidToStringDemo.aggregate([
    { $project: { _id: { $toString: "$_id" } } }
]);

Kết quả:

{ "_id" : "5c92b80036de59bd9de0639d" }
{ "_id" : "5c92b80436de59bd9de0639e" }
{ "_id" : "5c92b80936de59bd9de0639f" }
{ "_id" : "5c92b81836de59bd9de063a0" }

Giữ lại các field khác, chỉ chuyển _id

db.objectidToStringDemo.aggregate([
    { $project: { 
        _id: { $toString: "$_id" },
        UserName: 1
    } }
]);

Kết quả:

{ "_id" : "5c92b80036de59bd9de0639d", "UserName" : "John" }
{ "_id" : "5c92b80436de59bd9de0639e", "UserName" : "Chris" }
{ "_id" : "5c92b80936de59bd9de0639f", "UserName" : "Larry" }
{ "_id" : "5c92b81836de59bd9de063a0", "UserName" : "Robert" }

Ứng dụng thực tế

  • Trả về API JSON cho frontend (JavaScript xử lý string dễ hơn ObjectId).
  • Join (lookup) với collection khác mà khóa là string.
  • In log, debug, export CSV/Excel.

Trong Driver (Node.js, Python...)

  • Node.js: doc._id.toString() hoặc doc._id.toHexString()
  • Python (PyMongo): str(doc['_id'])
  • Mongoose: Tự động serialize thành string khi toJSON() hoặc toObject().

Lưu ý: $toString chỉ dùng trong aggregation. Trong find() thông thường, _id luôn là ObjectId.