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ế.