Creating Capped Models using MongoDB
Features under development in this section come preinstalled on DjongoCS. Visit the support page for more information.
Capped collections are fixed-size collections that support high-throughput operations that insert and retrieve documents based on insertion order. Capped collections work in a way similar to circular buffers: once a collection fills its allocated space, it makes room for new documents by overwriting the oldest documents in the collection.
Djongo lets you define certain Models as ‘Capped’ Models. The Entry
Model is a perfect candidate for being stored as a Capped Model.
class Entry(models.Model):
blog = models.EmbeddedField(
model_container=Blog,
model_form_class=BlogForm
)
meta_data = models.EmbeddedField(
model_container=MetaData,
model_form_class=MetaDataForm
)
headline = models.CharField(max_length=255)
body_text = models.TextField()
authors = models.ArrayReferenceField(
to=Author,
on_delete=models.CASCADE,
)
n_comments = models.IntegerField()
class Meta:
capped = True
size = 5242880
max = 5000
def __str__(self):
return self.headline
As most SQL DBs do not support capped tables, Django lacks a way to define such tables during a migration. Djongo comes with it is own version of manage.py
to make this happen. Switch to the root directory of your app and from the command line run:
python -m djongo.manage migrate
This will result in all Models having capped == True
to being recreated as Capped collections. Use this command only if such a collection doesn’t already exists or is empty, as djongo.manage
will drop all collections marked as capped in the model but are not capped in the DB and create a new empty capped collection.
Parts of this feature are still under development.