If you have a MongoDB document that has another document embedded in it, you still have to create a separate XML mapping document for the embedded one. So if you have a parent document called Activity that has an embedded document called Coordinates, the configuration would look something like this:
src/Acme/ActivityBundle/Resources/config/doctrine/Activity.mongodb.xml
<doctrine-mongo-mapping xmlns="http://doctrine-project.org/schemas/odm/doctrine-mongo-mapping"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://doctrine-project.org/schemas/odm/doctrine-mongo-mapping
http://doctrine-project.org/schemas/odm/doctrine-mongo-mapping.xsd">
<document name="Acme\ActivityBundle\Document\Activity" db="acme" collection="activity" customId="true">
<field fieldName="id" id="true" strategy="INCREMENT" />
<embed-one target-document="Acme\ActivityBundle\Document\Coordinates" field="locationCoordinates" />
<lifecycle-callbacks>
<lifecycle-callback method="callbackPrePersist" type="prePersist" />
<lifecycle-callback method="callbackPreUpdate" type="preUpdate" />
</lifecycle-callbacks>
<indexes>
<index>
<key name="locationCoordinates" order="2d" />
</index>
</indexes>
</document>
</doctrine-mongo-mapping>
src/Acme/ActivityBundle/Resources/config/doctrine/Coordinates.mongodb.xml
<doctrine-mongo-mapping xmlns="http://doctrine-project.org/schemas/odm/doctrine-mongo-mapping"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://doctrine-project.org/schemas/odm/doctrine-mongo-mapping
http://doctrine-project.org/schemas/odm/doctrine-mongo-mapping.xsd">
<embedded-document name="Acme\ActivityBundle\Document\Coordinates">
<field fieldName="latitude" type="float" />
<field fieldName="longitude" type="float" />
</embedded-document>
</doctrine-mongo-mapping>
The XML mapping format is not included in the Doctrine MongoDB ODM documentation. After a bunch of tests, I realized the @EmbeddedDocument in the annotation format example and simply replaced the document tag with embedded-document in the mapping file.
Comments
Post a Comment