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

Tạo ObjectId trong MongoDB từ chuỗi seed

ObjectId không chấp nhận chuỗi seed (seed string). Để dùng giá trị tùy chỉnh làm _id, gán trực tiếp giá trị string vào trường _id. Tạo collection:

> db.demo667.insertOne({_id:"Chris"});
{ "acknowledged" : true, "insertedId" : "Chris" }
> db.demo667.insertOne({_id:"David"});
{ "acknowledged" : true, "insertedId" : "David" }
> db.demo667.insertOne({_id:"Chris"});
2020-04-23T22:01:23.268+0530 E QUERY [js] WriteError: E11000 duplicate key error collection: test.demo667 index: _id_ dup key: { : "Chris" }
...
> db.demo667.insertOne({_id:"Bob"});
{ "acknowledged" : true, "insertedId" : "Bob" }
> db.demo667.insertOne({_id:"Mike"});
{ "acknowledged" : true, "insertedId" : "Mike" }

Hiển thị dữ liệu (Chris chỉ xuất hiện 1 lần do unique _id):

> db.demo667.find();

Kết quả:

Giải thích:

  • MongoDB cho phép _id là **bất kỳ kiểu BSON nào** (string, number, ObjectId, v.v.)
  • ObjectId tự động sinh có 12 bytes: timestamp (4) + machine (3) + pid (2) + counter (3)
  • Không thể "seed" ObjectId từ string - phải tự generate hoặc dùng driver support

Tạo ObjectId tùy ý (driver):

  • Node.js: new ObjectId("507f1f77bcf86cd799439011") (24 hex chars)
  • Python: ObjectId("507f1f77bcf86cd799439011")
  • Java: new ObjectId("507f1f77bcf86cd799439011")

Khuyến nghị: Để MongoDB tự sinh ObjectId (mặc định) để đảm bảo unique, sortable, distributed. Chỉ dùng custom _id khi có yêu cầu nghiệp vụ đặc biệt (UUID, slug, email...).