2017-10-17 13 views
1

J'ai une requête qui est comme ci-dessous:Existe-t-il un moyen de lier une autre fonction comme limit() à une requête pymongo basée sur la condition?

def get_data(self, limit=None): 
    # I just want to add limit() in case it is set, not otherwise 
    self.collection.find(condition) 

self.collection fait référence à la collection dans la classe. Si le paramètre limit est défini J'ai besoin de lier limit()pymongo à la requête.

NB: la limite est juste un cas échantillon, il pourrait être une fonction comme sort, etc. Je veux juste savoir est-il un mécanisme pour lier params comme celui-ci?

Répondre

1

Voulez-vous dire comme ça ?:

def get_data(self, limit=None): 
    cursor = self.collection.find(condition) 
    if limit is not None: 
     return cursor.limit(limit) 
    else: 
     return cursor 
+0

Oui, mais maintenant si vous devez ajouter une autre fonction comme 'sort' après' limit', que serait-ce? – ALH

1

ci-dessous 2 requêtes renvoient mêmes résultats

self.collection.find() 
self.collection.find().sort([("$natural", pymongo.ASCENDING)]) 

Sort Natural Order

et aussi en dessous de 2 requêtes renvoient mêmes résultats

self.collection.find() 
self.collection.find().limit(0) 

Une limite de 0 est équivalente à aucune limite. source

de sorte que vous pouvez combiner ces derniers et écrire une seule requête de ligne comme suit

self.collection.find().limit(self.limit or 0).sort(self.sort or [("$natural", pymongo.ASCENDING)]) 

Si vous avez défini des valeurs limites pour/trier elles seront appliquées autrement seront ignorées.