
- рдПрдХ рдЦреБрд▓рд╛ рд╕реНрд░реЛрдд рджрд╕реНрддрд╛рд╡реЗрдЬрд╝-рдЙрдиреНрдореБрдЦ рдбреЗрдЯрд╛рдмреЗрд╕ рдкреНрд░рдмрдВрдзрди рдкреНрд░рдгрд╛рд▓реА (DBMS) рдЬрд┐рд╕рдореЗрдВ рддрд╛рд▓рд┐рдХрд╛ рд▓реЗрдЖрдЙрдЯ рдХреЗ рд╡рд┐рд╡рд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рдпрд╣ C ++ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдХреНрд░рд┐рдПрдЯрд┐рд╡ рдХреЙрдордиреНрд╕ рд▓рд╛рдЗрд╕реЗрдВрд╕ рдХреЗ рддрд╣рдд рд╡рд┐рддрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдпрд╣ рдХрд╛рдлреА рд▓реЛрдХрдкреНрд░рд┐рдп рдФрд░ рдорд╛рдВрдЧ рдореЗрдВ рд╣реИред рдФрд░ рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╡рд┐рдЪрд╛рд░ Django рдврд╛рдВрдЪреЗ рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрди рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдпрд╛ рдерд╛ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдЧреЗ рдХреНрдпрд╛ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛рдПрдЧреАред
рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо mongodb- рдЗрдВрдЬрди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдпрд╣ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрдИ рдЕрдиреНрдп рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдирд┐рдХрдЯрддрд╛ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ, рдЬрд┐рд╕рдХреА рд╕реНрдерд╛рдкрдирд╛ рд╣рдо рдкрд╣рд▓реЗ рдХрд░реЗрдВрдЧреЗред
Django-nonrel - Django рдореЗрдВ NoSQL рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рдерд╛ред
pip install hg+https://bitbucket.org/wkornewald/django-nonrel
djangotoolbox - рдЧреИрд░-рд╕рдВрдмрдВрдзрдкрд░рдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдХрд░рдгреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ, рдпрд╣ рд╢рд╛рдирджрд╛рд░ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред
pip install hg+https://bitbucket.org/wkornewald/djangotoolbox
рдФрд░ рдЕрдм рд╣рдо рдореЛрдВрдЧреЛрдбрдм-рдЗрдВрдЬрди рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ:
pip install git+https://github.com/django-nonrel/mongodb-engine
рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рд╣рдорд╛рд░реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ:
DATABASES = { 'default' : { 'ENGINE' : 'django_mongodb_engine', 'NAME' : 'my_database' } }
рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдЖрдк рд╣реЛрд╕реНрдЯ, рдкреЛрд░реНрдЯ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛, рдкрд╛рд╕рд╡рд░реНрдб рднреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдпрд╣ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдорд╛рдирдХ рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ рдкреНрд░рдХрд╛рд░ рдХреЗ рдлрд╝реАрд▓реНрдб рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдорд╛рдирдХ django рдореЙрдбрд▓ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИрдВред
ListField
рд╕реВрдЪрд┐рдпрд╛рдБ рдФрд░
рдмреАрдПрд╕рдПрдирдПрд▓ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд╕рд░рдгрд┐рдпреЛрдВ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡
from djangotoolbox.fields import ListField class Post(models.Model): ... tags = ListField()
>>> Post(tags=['django', 'mongodb'], ...).save() >>> Post.objecs.get(...).tags ['django', 'mongodb']
рдкреНрд░рдХрд╛рд░ рд╡рд┐рдХрд▓реНрдк:
class Post(models.Model): ... edited_on = ListField(models.DateTimeField())
>>> post = Post(edited_on=['1010-10-10 10:10:10']) >>> post.save() >>> Post.objects.get(...).edited_on [datetime.datetime([1010, 10, 10, 10, 10, 10])]
рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдХреНрд╖реЗрддреНрд░ рдПрдХ рд╕реЗ рдХрдИ рд╕рдВрдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ:
from djangotoolbox.fields import EmbeddedModelField, ListField class Post(models.Model): ... comments = ListField(EmbeddedModelField('Comment')) class Comment(models.Model): ... text = models.TextField()
рдПрдВрдмреЗрдбреЗрдбрдореЙрдбреЗрд▓рдлрд┐рд▓реНрдб - рдореЙрдбрд▓ рдХреЗ рдмреАрдЪ рд╕рдВрдмрдВрдзреЛрдВ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
DictField
рджреВрд╕рд░реЗ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдХреНрд╖реЗрддреНрд░ DictField рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ BSON рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
from djangotoolbox.fields import DictField class Image(models.Model): ... exif = DictField()
>>> Image(exif=get_exif_data(...), ...).save() >>> Image.objects.get(...).exif {u'camera_model' : 'Spamcams 4242', 'exposure_time' : 0.3, ...}
рдкреНрд░рдХрд╛рд░ рд╡рд┐рдХрд▓реНрдк:
class Poll(models.Model): ... votes = DictField(models.IntegerField())
>>> Poll(votes={'bob' : 3.14, 'alice' : '42'}, ...).save() >>> Poll.objects.get(...).votes {u'bob' : 3, u'alice' : 42}
рдбреЗрдЯрд╛ рдЕрдкрдбреЗрдЯ
Post.objects.filter(...).update(title='Everything is the same')
рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк $ рд╕реЗрдЯ рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
.update(..., {'$set': {'title': 'Everything is the same'}})
рд╕рд╛рде рд╣реА рдлрд╝рдВрдХреНрд╢рди
F () Post.objects.filter(...).update(visits=F('visits')+1)
рдкрд░рд┐рдгрд╛рдо рдХреБрдЫ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
.update(..., {'$inc': {'visits': 1}})
рдирд┐рдореНрди-рд╕реНрддрд░реАрдп рдкреНрд░рд╢реНрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ Django ORM рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХреА рдХрдореА рд╣реИ, рддреЛ рдЖрдк рдорд╛рдирдХ рддрдВрддреНрд░ рдХреЛ рджрд░рдХрд┐рдирд╛рд░ рдХрд░ MongoDB рдХреЗ рдкреНрд░рд╢реНрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
raw_query () - рдПрдХ рддрд░реНрдХ рд▓реЗрддрд╛ рд╣реИ, рдПрдХ рдорд╛рдирдХ Django рдХреНрд╡реЗрд░реА рдХреЗ рд░реВрдк рдореЗрдВ рдбреЗрдЯрд╛ рд▓реМрдЯрд╛рддрд╛ рд╣реИред рдЖрдЧреЗ рдбрд╛рдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдЕрдЪреНрдЫрд╛ рд╣реИред
рднреВ рдбреЗрдЯрд╛, рдореЙрдбрд▓ рдХреЗ рд╕рд╛рде рдЙрджрд╛рд╣рд░рдг:
from djangotoolbox.fields import EmbeddedModelField from django_mongodb_engine.contrib import MongoDBManager class Point(models.Model): latitude = models.FloatField() longtitude = models.FloatField() class Place(models.Model): ... location = EmbeddedModelField(Point) objects = MongoDBManager()
рд╣рдореЗрдВ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЗ рдкрд╛рд╕ рд╕рднреА рдмрд┐рдВрджреБ рдорд┐рд▓рддреЗ рд╣реИрдВ:
>>> here = {'latitude' : 42, 'longtitude' : 3.14} >>> Place.objects.raw_query({'location' : {'$near' : here}})
raw_update () - рдпрджрд┐ рд╣рдо рдбреЗрдЯрд╛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдорд╛рдирдХ рдЙрдкрдХрд░рдг рдирд╣реАрдВ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдореЙрдбрд▓:
from django_mongodb_engine.contrib import MongoDBManager class FancyNumbers(models.Model): foo = models.IntegerField() objects = MongoDBManager()
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:
FancyNumbers.objects.raw_update({}, {'$bit' : {'foo' : {'or' : 42}}})
рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдлреВ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд┐рдЯрд╡рд╛рдЗрдЬрд╝ рдпрд╛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЗрд╕ рдмрдВрдбрд▓ рдХреА рд╕рдВрднрд╛рд╡рдирд╛рдПрдВ рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрддреА рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк рд╕рдм рдХреБрдЫ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд▓реЗрдЦ рдЙрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╡рд┐рд▓рдВрдмрд┐рдд рдирд╣реАрдВ рд╣реИред рдкреВрд░рд╛ рд╡рд┐рд╡рд░рдг рдФрд░ рдЙрджрд╛рд╣рд░рдг рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рд▓рд┐рдВрдХ рдкрд░ рджреЗрдЦреЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред
рд╕рдВрджрд░реНрдн:
MongoDBMongoDB рдЗрдВрдЬрдирдмреНрд▓реЙрдЧ рдирд┐рд░реНрдорд╛рдг рдЙрджрд╛рд╣рд░рдгGitHub