MongoDB backend for Django.
The aim of the project is to create a native django DB backend for mongo (so that it can be accessed through the django ORM).
This will not be a complete replacement for a django DB backend, because MongoDB is not rel, but it will be very useful for making mixing apps (SQL - NotSQL).
The project is in the early stage.
mongoDB is accessed through pyMongo and relies on django-trunk (>=1.2).
Some fields types are imported from mongoengine.
Features:
- Multidb (use a mixin of SQL and NotSQL DB)
- Embdedded model management
- SQL model management
- Routing on mongodb of some apps
- Gridfs storage backend
- South support
Extra fields:
- Dictionary Field
- List Field
- Sorted List Field
TODO (ramdom order):
- geofield
- set field
- special manager for complex query (map/reduce)
- Master and Slave support
- more testing
Set up database with Rel and not rel database:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': 'test.db',
'USER': '',
'PASSWORD': '',
'HOST': '',
'PORT': '',
},
'mongodb': {
'ENGINE': 'mongodj',
'NAME': 'test',
'USER': '',
'PASSWORD': '',
'HOST': 'localhost',
'PORT': '27017',
'SUPPORTS_TRANSACTIONS': False,
},
}
in INSTALLED_APPS 'django.contrib.contenttypes' is required.
Activate routing adding:
DATABASE_ROUTERS = ['mongodj.router.MongoDBRouter']
Select apps that you want manage in mongodb:
MONGODB_MANAGED_APPS = ['testproj.myapp', ]
Add this line to settings.py to make south happy to use mongodj.
SOUTH_DATABASE_ADAPTERS = { "mongodb" : "mongodj.south"}
Hey dudes add an issue if you want some other features!
Examples:
Blog.objects.count()
Blog.objects.get(title="my title")
Blog.objects.filter(title="my title")
Entry.objects.order_by('-date_published')
Entry.objects.filter(date_published__lt=now)
entry1 = Entry(title="entry 1", blog=blog1)
Entry.objects.filter(blog=blog1.pk)
PS: for extra examples and usage look the testproj (models.py and test.py).