PyMongo Curseur Itération
Je suis à la recherche pour créer et gérer un curseur en python la façon dont les curseurs en mode natif œuvre de mongo. Je sais que le but est de faire " résultat = collection.find () "et n'a" pour les enregistrer dans le résultat, mais je suis à la recherche d'envelopper itération de la fonctionnalité dans une classe. Je voudrais être en mesure de créer un nouvel objet de classe et d'appeler une fonction par exemple init_cursor() pour créer une connexion db et faites une recherche de retour d'un curseur. Je voudrais ensuite le fait d'avoir une get_next() fonction qui permettrait de passer à la prochaine résultat et de l'ensemble de membres de données de classe en fonction du résultat. Voici le pesudo-code:
class dataIter():
def __init__(self):
self.collection = pymongo.Connection().db.collection
self.cursor = self.collection.find({}) #return all
self.age = None
self.gender = None
def get_next(self):
if self.cursor.hasNext():
data = self.cursor.next()
self.set_data(data)
def set_data(self, data):
self.age = data['age']
self.gender = data['gender']
De cette façon, je serais en mesure de simplement appeler:
obj.get_next()
age = obj.age
gender = obj.gender
ou certains autres fonctions d'aide à récupérer des données à partir de chaque document
OriginalL'auteur Ghjnut | 2012-05-03
Vous devez vous connecter pour publier un commentaire.
Je ne comprends pas comment ce que vous montrez est plus pratique que faire juste:
Il n'est pas clair comment ce wrapper est utile. Aussi, si ce que vous êtes vraiment après est un ORM, alors il ne faut pas réinventer la roue quand elle existe: http://mongoengine.org/
OriginalL'auteur jdi
Vous devez utiliser le python itérateur protocole, vous classe peut ressembler à ceci
Ensuite, vous pouvez effectuer une itération comme ce
OriginalL'auteur Ivo Bosticky
Vous pouvez utiliser quelque chose comme ce que vous avez déjà affichés pour accomplir cette tâche. PyMongo curseurs n'ont pas
haveNext
méthode, mais ils ont unnext
méthode qui renvoie le document suivant, ou augmenterStopIteration
(ce qui est spécifié par le Python itérateur protocole).Vous pouvez également prendre un peu plus loin: plutôt que d'attribuer des valeurs à partir du document à des attributs de la classe, vous pouvez utiliser
__getattr__
qui implémente l'attribut de recherche pour les classes Python.Mettre tous ensemble, vous pourriez vous retrouver avec quelque chose comme:
OriginalL'auteur dcrosta
Voici ce que j'ai fini par aller avec:
OriginalL'auteur Ghjnut