Principes de base pour toucher MongoDB avec MongoEngine

Cet article est le troisième jour de MongoDB Advent Calendar 2013.

Qu'est-ce que MongoEngine?

MongoEngine est une bibliothèque appelée ** ODM == Object Document Mapper ** qui vous permet de manipuler des documents pour des objets similaires à MongoDB. Il fait abstraction de la définition, de la récupération et du stockage du schéma de document.

L'utilisation est très similaire à l'ORM de Django, et les utilisateurs de Django pourront utiliser MongoDB sans apprendre les requêtes spécifiques à MongoDB. peut être.

Cependant, essayer de faire quelque chose en profondeur nécessite une connaissance de MongoDB.

Ce que MongoEngine peut et ne peut pas faire

Ce que tu peux faire

Les choses que vous ne pouvez pas faire ou les choses qui vous gênent

Touchons

Installation

Puisqu'il est enregistré dans pypi, installez-le avec pip.

$ pip install mongoengine

Paramètres de destination de connexion

Utilisez mongoengine.connect pour vous connecter à MongoDB. Pour vous connecter à une base de données appelée * mongotest *:

from mongoengine import connect

connect('mongotest')

Ajoutez des arguments lors de la spécification d'un hôte ou d'un port.

connect('mongotest', host='192.168.0.10', port=999)

Créer une classe de documents

Définissez une sous-classe qui hérite de la classe mongoengine.document.Document. Attribuez «mongoengine.fields. *» À chaque champ. Les classes de champ sont définies avec des noms similaires aux noms d'objet python, tels que IntField et StringField.

documents.py


from mongoengine.document import Document
from mongoengine import fields

class Athlete(Document):
    name = fields.StringField()
    age = fields.IntField()

    def __unicode__(self):
        return self.name

La bonne chose à propos de MongoDB est qu'il est sans schéma, mais je trouve personnellement qu'il est plus facile de créer et d'exploiter un schéma de classe de document ==. En passant, vous pouvez travailler avec plusieurs classes de documents dans une seule collection, de sorte que les avantages d'être sans schéma ne sont pas gâchés.

Ajouter de la documentation

Instanciez la classe Athlète et appelez la méthode save ().

from documents import Athlete

#Ajouter le taro yamada et le hanako yamada
athlete = Athlete(name=u"taro yamada", age=30)
athlete.save()
athlete = Athlete(name=u"hanako yamada", age=28)
athlete.save()

En regardant la commande mongo ...

$ mongo mongotest
MongoDB shell version: 2.4.6
connecting to: mongotest

> show dbs
local	0.078125GB
mongotest	0.203125GB

La base de données est créée automatiquement. La collection est

> show collections
athlete
system.indexes

> db.athlete.find()
{ "_id" : ObjectId("529db366bdbf568299123013"), "name" : "taro yamada", "age" : 30 }
{ "_id" : ObjectId("529db458bdbf568299123014"), "name" : "hanako yamada", "age" : 28 }

Et ainsi de suite, les documents sont stockés dans la collection des athlètes.

Obtenir de la documentation

L'acquisition de documents est également effectuée auprès de la classe Athlète. Récupérons tous les enregistrements par la méthode ʻall () via la propriété ʻobjects (qui est familière aux utilisateurs de Django).

>>> Athlete.objects.all()
[<Athlete: taro yamada>, <Athlete: hanako yamada>]

Utilisez la méthode filter () pour ajouter une condition de récupération.

>>> Athlete.objects.filter(age=28)
[<Athlete: hanako yamada>]

Si vous ne voulez obtenir qu'un seul document, vous pouvez utiliser la méthode get ().

>>> Athlete.objects.get(age=28)
<Athlete: hanako yamada>

Une exception est levée si le document n'existe pas lorsque la méthode get () est exécutée.

>>> Athlete.objects.get(name=u"inoki")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/key/.virtualenvs/mongoenginetest/lib/python2.7/site-packages/mongoengine/queryset/base.py", line 186, in get
    raise queryset._document.DoesNotExist(msg)
documents.DoesNotExist: Athlete matching query does not exist.

Vous pouvez également utiliser la méthode count () pour compter le nombre de documents.

>>> Athlete.objects.all().count()
2

Mise à jour du document

Pour mettre à jour le document, exécutez la méthode save () de l'instance. S'il n'y a pas de document, il sera ajouté, et s'il y en a, il sera mis à jour.

>>> athlete = Athlete.objects.get(name=u"taro yamada")
>>> athlete.age = 50
>>> athlete.save()
<Athlete: taro yamada>
>>> athlete.age
50

Supprimer le document

Émettez la méthode delete () sur une instance de la classe Athlète.

>>> hanako = Athlete.objects.get(age=28)
>>> hanako.delete()
>>> Athlete.objects.all()
[<Athlete: taro yamada>]

hanako a été supprimé :)

Si vous enchaînez par inadvertance la méthode delete () après la méthode ʻall () , tout disparaîtra (même si vous utilisez le filter () `).

>>> Athlete.objects.all().delete()
>>> Athlete.objects.all()
[]

taro a également été supprimé :)

Recommended Posts

Principes de base pour toucher MongoDB avec MongoEngine
Premiers pas avec Python Bases de Python
Bases du traitement d'images binarisées par Python
Les bases de Python ①
Bases de python ①
Principes de base de MongoDB: Premiers pas avec CRUD avec JAVA
Principes de base du grattage Python
Impressions de toucher Django
Principes de base de MongoDB: traitement des transactions
# 4 [python] Bases des fonctions
Bases des programmes réseau?
La fondation de la fondation Perceptron
[Bases des statistiques mathématiques modernes avec python] Chapitre 1: Probabilité
Bases de l'analyse de régression
[Bases de la science des données] Collecte de données depuis RSS avec python
Bases de python: sortie
Bases de l'apprentissage automatique (mémoire)
Equation de mouvement avec sympy
[Note] Faites fonctionner MongoDB avec Python
Manipulation de mongoDB avec Python-Partie 6: agrégat-
python: principes de base de l'utilisation de scikit-learn ①
Apprendre avec l'enseignant 1 Principes de base de l'apprentissage avec l'enseignant (classification)
Souvenirs de combats avec Selenium
Principes de base de XPath (1) - Concept de base de XPath
Prédiction de la moyenne Nikkei avec Pytorch
Principes de base de Python x SIG (1)
Comment extraire des fonctionnalités de données de séries chronologiques avec les bases de PySpark
Une série d'ingénieurs d'infrastructure amateurs touchant Django avec Docker ③: administrateur Django
Résolution des problèmes de sac à dos avec les outils OR de Google - Pratiquer les bases des problèmes d'optimisation combinée
[Bases des statistiques mathématiques modernes avec python] Chapitre 3: Distribution de probabilité typique