Sự khác biệt duy nhất là một thực sự là một ObjectId
và cái còn lại là biểu diễn chuỗi của những gì trông giống như một ObjectId
.
DBRef dưới dạng một ObjectId:
db.persons.insert({name: 'cavin',
sister: new DBRef('persons',
new ObjectId('5165419064fada69cef33ea2'))}) // use an ObjectId
DBRef dưới dạng một chuỗi:
db.persons.insert({name: 'bob',
sister: new DBRef('persons',
'5165419064fada69cef33ea2')}) // use a string
Trong ví dụ bạn đã đưa vào, ObjectId
định dạng có thể dẫn đến việc lưu trữ hiệu quả hơn vì đó là giá trị 12 byte thay vì 24 byte mà biểu diễn chuỗi sẽ yêu cầu. Nếu bạn muốn sử dụng DBRef
s, tôi sẽ sử dụng một ObjectId
nếu bộ sưu tập được tham chiếu đang sử dụng ObjectId
s cho _id
.
Bạn không bắt buộc phải sử dụng ObjectId
trong DBRef
. Nó có thể là bất kỳ giá trị nào đại diện cho khóa (_id
) của bộ sưu tập liên quan / DB.
Như tài liệu
gợi ý, trừ khi bạn có lý do thuyết phục để sử dụng DBRef
, hãy sử dụng các tham chiếu thủ công để thay thế.