Dokumentacja jest dość przejrzysta w sekcji podręcznika, do której się odnosisz, która jest sekcją dotyczącą Odniesienia do baz danych . Najważniejsza część w zrozumieniu tego jest zawarta w oświadczeniu otwierającym na stronie:
Dalsze informacje obejmują temat, w jaki sposób możesz zdecyduj się na dostęp do danych, które przechowujesz w innej kolekcji.
Istnieje DBRef specyfikacja, która bez wchodzenia w szczegóły, może być zaimplementowane w niektórych sterownikach w taki sposób, że gdy zostaną znalezione w twoich dokumentach, automatycznie odzyskają (rozszerzą) dokument odniesienia do bieżącego dokumentu. Zostałoby to zaimplementowane „za kulisami” z innym zapytaniem do tej kolekcji dla dokumentu o tym _id.
W przypadku Odniesienia ręczne to po prostu mówi, że w twoim dokumencie jest tylko pole, które zawiera jako zawartość ObjectId z innego dokumentu. Różni się to od DBRef tylko tym, że nigdy być przetwarzane przez podstawową implementację sterownika, pozostawia sposób obsługi dalszego pobierania tego innego dokumentu wyłącznie do Ciebie.
W przypadku:
> db.collection.findOne()
{
_id: <ObjectId>,
name: "This",
something: "Else",
ref: <AnotherObjectId>
}
ref
pole w dokumencie jest niczym więcej niż zwykłym identyfikatorem ObjectId i nie robi nic specjalnego. Pozwala to na przesłanie własnego zapytania, aby uzyskać szczegóły obiektu, do których się to odnosi:
> db.othercollection.findOne({ _id: <AnotherObjectId > })
{
_id: <ObjectId>
name: "That"
something: "I am a sub-document to This!"
}
Pamiętaj, że wszystkie te procesy po stronie klienta za pośrednictwem interfejsu API sterownika. Żadne z tych pobierania innych dokumentów w żadnym wypadku nie dzieje się na serwerze.