Документацията е доста ясна в раздела на ръководството, към който се отнасяте, който е разделът за Препратки към бази данни . Най-важната част от разбирането на това се съдържа в началното изявление на страницата:
Допълнителната информация обхваща темата как можете изберете да се справите с достъпа до данни, които съхранявате в друга колекция.
Има DBRef спецификация, която без да навлиза в много повече подробности,може да бъдат внедрени в някои драйвери като начин, когато те бъдат намерени във вашите документи, те автоматично ще извлекат (разширят) посочения документ в текущия документ. Това ще бъде приложено „зад кулисите“ с друга заявка към тази колекция за документа с този _id.
В случай на Ръчни препратки това всъщност означава, че има просто поле във вашия документ, което има като съдържание ObjectId от друг документ. Това се различава от DBRef само като нещо, което никога няма да бъдат обработени от внедряване на основен драйвер, оставя как да се справите с по-нататъшното извличане на този друг документ зависи единствено от вас.
В случай на:
> db.collection.findOne()
{
_id: <ObjectId>,
name: "This",
something: "Else",
ref: <AnotherObjectId>
}
ref
полето в документа не е нищо повече от обикновен ObjectId и не прави нищо специално. Това, което ви позволява да направите, е да изпратите собствена заявка, за да получите подробностите за обекта, за които се отнася:
> db.othercollection.findOne({ _id: <AnotherObjectId > })
{
_id: <ObjectId>
name: "That"
something: "I am a sub-document to This!"
}
Имайте предвид, че всичко това се обработва от страна на клиента чрез API на драйвера. Нищо от това извличане на други документи не се случва на сървъра в никакъв случай.