@@ -16,58 +16,49 @@ Database References
1616 :class: singlecol
1717
1818For many use cases in MongoDB, the denormalized data model where
19- related data is stored within a single :term:`document <document>` will
20- be optimal. However, in some cases, it makes sense to store related
19+ related data is stored within a single :term:`document <document>` is optimal.
20+ However, in some cases, it makes sense to store related
2121information in separate documents, typically in different collections
2222or databases.
2323
2424.. important::
2525
26- MongoDB 3.2 introduces :pipeline:`$lookup` pipeline stage to perform
26+ You can use the :pipeline:`$lookup` pipeline stage to perform
2727 a left outer join to an unsharded collection in the same database.
28- For more information and examples, see :pipeline:`$lookup`.
2928
30- Starting in MongoDB 3.4, you can also use :pipeline:`$graphLookup`
31- pipeline stage to join an unsharded collection to perform recursive
32- search. For more information and examples, see
33- :pipeline:`$graphLookup`.
29+ You can also use the :pipeline:`$graphLookup` pipeline stage to join an
30+ unsharded collection to perform recursive search.
3431
3532This page outlines alternative procedures that predate the
3633:pipeline:`$lookup` and :pipeline:`$graphLookup` pipeline stages.
3734
38- MongoDB applications use one of two methods for relating documents:
35+ MongoDB applications use one of two methods to relate documents:
3936
40- - :ref:`Manual references <document-references>` where you save the
41- ``_id`` field of one document in another document as a reference.
42- Then your application can run a second query to return the related
43- data. These references are simple and sufficient for most use
44- cases.
37+ - :ref:`Manual references <document-references>` save the
38+ ``_id`` field of one document in another document as a reference.
39+ Your application runs a second query to return the related
40+ data. These references are simple and sufficient for most use
41+ cases.
4542
46- - :ref:`DBRefs <dbref-explanation>` are references from one document to another
47- using the value of the first document's ``_id`` field, collection name,
48- and, optionally, its database name. By including these names, DBRefs
49- allow documents located in multiple collections to be more easily linked
50- with documents from a single collection .
43+ - :ref:`DBRefs <dbref-explanation>` are references from one document to another
44+ using the value of the first document's ``_id`` field, collection name,
45+ and, optionally, its database name, as well as any other fields. DBRefs allow
46+ you to more easily reference documents stored in multiple collections or
47+ databases .
5148
52- To resolve DBRefs, your application
53- must perform additional queries to return the referenced
54- documents. Many :ecosystem:`drivers </drivers>` have helper
55- methods that form the query for the DBRef automatically. The
56- drivers [#official-driver]_ do not *automatically* resolve DBRefs
57- into documents.
49+ To resolve DBRefs, your application must perform additional queries to return
50+ the referenced documents. Some :driver:`MongoDB drivers </>` provide helper
51+ methods to enable DBRefs to be resolved into documents, but it doesn't happen
52+ automatically.
5853
59- DBRefs provide a common format and type to represent relationships among
60- documents. The DBRef format also provides common semantics for representing
61- links between documents if your database must interact with
62- multiple frameworks and tools.
54+ DBRefs provide a common format and type to represent relationships among
55+ documents. The DBRef format also provides common semantics for representing
56+ links between documents if your database must interact with
57+ multiple frameworks and tools.
6358
6459Unless you have a compelling reason to use DBRefs, use manual
6560references instead.
6661
67- .. [#official-driver] Some community supported drivers may have
68- alternate behavior and may resolve a DBRef into a document
69- automatically.
70-
7162.. _document-references:
7263
7364Manual References
@@ -76,7 +67,7 @@ Manual References
7667Background
7768~~~~~~~~~~
7869
79- Using manual references is the practice of including one
70+ A manual reference is the practice of including one
8071:term:`document's <document>` ``_id`` field in another document. The
8172application can then issue a second query to resolve the referenced
8273fields as needed.
@@ -132,7 +123,11 @@ Background
132123DBRefs are a convention for representing a :term:`document`, rather
133124than a specific reference type. They include the name of the
134125collection, and in some cases the database name, in addition to the
135- value from the ``_id`` field.
126+ value from the ``_id`` field.
127+
128+ Optionally, DBRefs can include any number of other fields. Extra field names
129+ must follow any :ref:`rules for field names <limit-restrictions-on-field-names>`
130+ imposed by the server version.
136131
137132Format
138133~~~~~~
@@ -156,8 +151,6 @@ DBRefs have the following fields:
156151 Contains the name of the database where the referenced document
157152 resides.
158153
159- Only some drivers support ``$db`` references.
160-
161154.. example::
162155
163156 DBRef documents resemble the following document:
@@ -177,13 +170,15 @@ DBRefs have the following fields:
177170 "creator" : {
178171 "$ref" : "creators",
179172 "$id" : ObjectId("5126bc054aed4daf9e2ab772"),
180- "$db" : "users"
173+ "$db" : "users",
174+ "extraField" : "anything"
181175 }
182176 }
183177
184178 The DBRef in this example points to a document in the ``creators``
185179 collection of the ``users`` database that has
186- ``ObjectId("5126bc054aed4daf9e2ab772")`` in its ``_id`` field.
180+ ``ObjectId("5126bc054aed4daf9e2ab772")`` in its ``_id`` field. It also contains
181+ an optional field.
187182
188183.. note::
189184
0 commit comments