Tài liệu khá rõ ràng trong phần thủ công mà bạn đang tham khảo, đó là phần trên Tham chiếu Cơ sở dữ liệu . Phần quan trọng nhất để hiểu điều này có trong lời mở đầu trên trang:
Thông tin khác bao gồm chủ đề về cách bạn có thể chọn giải quyết việc truy cập dữ liệu mà bạn lưu trữ trong một bộ sưu tập khác.
Có DBRef đặc điểm kỹ thuật mà không cần đi vào quá nhiều chi tiết, có thể được triển khai trong một số trình điều khiển như một cách mà khi chúng được tìm thấy trong tài liệu của bạn, chúng sẽ tự động truy xuất (mở rộng) tài liệu được tham chiếu vào tài liệu hiện tại. Điều này sẽ được triển khai "đằng sau hậu trường" với một truy vấn khác tới bộ sưu tập đó cho tài liệu của _id đó.
Trong trường hợp của Tham khảo thủ công về cơ bản điều này nói rằng chỉ có một trường trong tài liệu của bạn có nội dung như ObjectId từ một tài liệu khác. Điều này chỉ khác với DBRef là thứ sẽ không bao giờ được xử lý bởi một triển khai trình điều khiển cơ sở là cách bạn xử lý bất kỳ truy xuất nào khác của tài liệu đó sẽ được thông báo cho bạn.
Trong trường hợp:
> db.collection.findOne()
{
_id: <ObjectId>,
name: "This",
something: "Else",
ref: <AnotherObjectId>
}
ref
trường trong tài liệu không hơn gì một ObjectId đơn thuần và không có gì đặc biệt. Điều này cho phép bạn làm là gửi truy vấn của riêng bạn để lấy chi tiết Đối tượng mà điều này đề cập đến:
> db.othercollection.findOne({ _id: <AnotherObjectId > })
{
_id: <ObjectId>
name: "That"
something: "I am a sub-document to This!"
}
Hãy nhớ rằng tất cả các quá trình này ở phía máy khách thông qua API trình điều khiển. Việc tìm nạp các tài liệu khác không xảy ra trên máy chủ trong mọi trường hợp.