Integrating MongoDB and Django
3 weeks, 4 days ago — 0 Comments — Permalink
Check out this great introduction to MongoEngine and Mumblr from Kevin Fricovsky.
3 weeks, 4 days ago — 0 Comments — Permalink
Check out this great introduction to MongoEngine and Mumblr from Kevin Fricovsky.
1 month ago — 8 Comments — Permalink
MongoEngine is a Document-Object Mapper (think ORM, but for document databases) for working with MongoDB from Python. It uses a simple declarative API, similar to that of the Django ORM.
Here’s a brief run-down of some of the main features of MongoEngine:
sum and averageQ objectsTo define a document, just inherit from the Document class and add some fields:
class BlogPost(Document): title = StringField(required=True) slug = StringField(required=True, max_length=250) content = StringField(required=True) date = DateTimeField(default=datetime.now, required=True) tags = ListField(StringField())
To save documents to the database, just instantiate a Document object, fill in the fields, and call save:
post = BlogPost(title='Introducing MongoEngine', slug='introducing-mongoengine') post.content = 'MongoEngine is a Document-Object Mapper...' post.tags = ['mongodb', 'mongoengine'] post.save()
To find documents, use the objects attribute of a Document subclass:
latest_posts = BlogPost.objects.order_by('-date')[:25] mongodb_posts = BlogPost.objects(tags='mongodb')
How about a tag cloud? Simple:
# Get a dictionary with tags as the keys and frequencies as the values tag_freqs = BlogPost.objects.item_frequencies('tag')
Every blog need comments, right?
class Comment(EmbeddedDocument): author = StringField() content = StringField(required=True) date = DateTimeField() # Modify the previously defined BlogPost document class BlogPost(Document): ... comments = ListField(EmbeddedDocumentField(Comment)) ... # Let's add a comment, this is performed as an atomic operation comment = Comment(author=form['author'], content=form['content']) BlogPost.objects(id=post_id).update(push__comments=comment)
I could go on, but I’ll keep this post short and to the point. For more information, see the documentation. The source is available on GitHub, fork it and have a play!