Die Dokumentation in dem Handbuchabschnitt, auf den Sie sich beziehen, ist ziemlich klar. Dies ist der Abschnitt zu Datenbankreferenzen . Der wichtigste Teil, um dies zu verstehen, ist in der Eröffnungsaussage auf der Seite enthalten:
Die weiteren Informationen behandeln das Thema, wie Sie können Entscheiden Sie sich für den Zugriff auf Daten, die Sie in einer anderen Sammlung speichern.
Es gibt den DBRef Spezifikation, die, ohne zu sehr ins Detail zu gehen, kann in einigen Treibern so implementiert werden, dass sie, wenn sie in Ihren Dokumenten gefunden werden, automatisch das referenzierte Dokument in das aktuelle Dokument abrufen (erweitern). Dies würde "hinter den Kulissen" mit einer weiteren Abfrage dieser Sammlung nach dem Dokument dieser _id.
implementiert werdenIm Fall von Handbuchreferenzen Dies bedeutet im Grunde, dass es in Ihrem Dokument lediglich ein Feld gibt, das als Inhalt die ObjectId hat aus einem anderen Dokument. Dies unterscheidet sich von DBRef nur dadurch, dass es nie wird von einer Basistreiberimplementierung verarbeitet werden, bleibt es Ihnen überlassen, wie Sie mit dem weiteren Abrufen dieses anderen Dokuments umgehen.
Im Fall von:
> db.collection.findOne()
{
_id: <ObjectId>,
name: "This",
something: "Else",
ref: <AnotherObjectId>
}
Der ref
-Feld im Dokument ist nichts anderes als eine einfache ObjectId und macht nichts Besonderes. Dadurch können Sie Ihre eigene Abfrage senden, um die Objektdetails zu erhalten, auf die sich diese bezieht:
> db.othercollection.findOne({ _id: <AnotherObjectId > })
{
_id: <ObjectId>
name: "That"
something: "I am a sub-document to This!"
}
Denken Sie daran, dass all dies auf der Clientseite über die Treiber-API abläuft. Nichts davon, andere Dokumente abzurufen, geschieht in jedem Fall auf dem Server.