code: private void parseLinkValue(DBObject        owningObj,
                                  UNode           linkNode,
                                  FieldDefinition linkFieldDef) {
          // Prerequisites:
          assert owningObj != null;
          assert linkNode != null;
          assert linkFieldDef != null;
          assert linkFieldDef.isLinkField();
          TableDefinition tableDef = linkFieldDef.getTableDef();
          
          // Value should be an array, though it could be a map with one child.
          Utils.require(linkNode.isCollection(), "Value of link field should be a collection: " + linkNode);
          
          // Iterate through child nodes.
          TableDefinition extentTableDef =
              tableDef.getAppDef().getTableDef(linkFieldDef.getLinkExtent());
          for (UNode childNode : linkNode.getMemberList()) {
              // Ensure this element is "doc" node.
              Utils.require(childNode.getName().equals("doc"),
                            "link field array values should be 'doc' objects: " + childNode);
              
              // Recurse and build a DBObject from the doc node.
              DBObject linkedObject = parseObject(extentTableDef, childNode);
              
              // Add the linked object to the cache and add its object ID to the set.
              String objID = linkedObject.getObjectID();
              cacheLinkedObject(owningObj.getObjectID(), linkFieldDef.getName(), linkedObject);
              owningObj.addFieldValues(linkFieldDef.getName(), Arrays.asList(objID));
          }
      }
docs: object and add it to the linked object cache for the owning object and link.