Django рдореЗрдВ MongoDB рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛

- рдПрдХ рдЦреБрд▓рд╛ рд╕реНрд░реЛрдд рджрд╕реНрддрд╛рд╡реЗрдЬрд╝-рдЙрдиреНрдореБрдЦ рдбреЗрдЯрд╛рдмреЗрд╕ рдкреНрд░рдмрдВрдзрди рдкреНрд░рдгрд╛рд▓реА (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}}}) 

рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдлреВ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд┐рдЯрд╡рд╛рдЗрдЬрд╝ рдпрд╛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЗрд╕ рдмрдВрдбрд▓ рдХреА рд╕рдВрднрд╛рд╡рдирд╛рдПрдВ рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрддреА рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк рд╕рдм рдХреБрдЫ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд▓реЗрдЦ рдЙрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╡рд┐рд▓рдВрдмрд┐рдд рдирд╣реАрдВ рд╣реИред рдкреВрд░рд╛ рд╡рд┐рд╡рд░рдг рдФрд░ рдЙрджрд╛рд╣рд░рдг рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рд▓рд┐рдВрдХ рдкрд░ рджреЗрдЦреЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред

рд╕рдВрджрд░реНрдн:
MongoDB
MongoDB рдЗрдВрдЬрди
рдмреНрд▓реЙрдЧ рдирд┐рд░реНрдорд╛рдг рдЙрджрд╛рд╣рд░рдг
GitHub

Source: https://habr.com/ru/post/In160191/


All Articles