Capped Collections¶
Capped collections are fixed sized collections that have a very high performance auto-LRU age-out feature (age out is based on insertion order).
In addition, capped collections automatically, with high performance, maintain insertion order for the objects in the collection; this is very powerful for certain use cases such as logging.
Mapping¶
You can configure the collection in the collection
attribute of
the @Document
annotation:
- PHP
<?php /** * @Document(collection={ * "name"="collname", * "capped"=true, * "size"=100000, * "max"=1000 * }) */ class Category { /** @Id */ public $id; /** @Field(type="string") */ public $name; }
- XML
<?xml version="1.0" encoding="UTF-8"?> <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="Documents\Category" collection="collname" capped-collection="true" capped-collection-size="100000" capped-collection-max="1000"> <field fieldName="id" id="true" /> <field fieldName="name" type="string" /> </document> </doctrine-mongo-mapping>
- YAML
Documents\Category: type: document collection: name: collname capped: true size: 100000 max: 1000 fields: id: type: id id: true name: type: string
Creating¶
Remember that you must manually create the collections. If you let
MongoDB create the collection lazily the first time it is selected,
it will not be created with the capped configuration. You can
create the collection for a document with the SchemaManager
that can be acquired from your DocumentManager
instance:
<?php
$documentManager->getSchemaManager()->createDocumentCollection('Category');
You can drop the collection too if it already exists:
<?php
$documentManager->getSchemaManager()->dropDocumentCollection('Category');