2013-02-05 14 views
10

Questi sono tutti i documenti nella mia collezione:limite cursore Pymongo (1) restituisce più di 1 risultato

{ 
    "_id" : ObjectId("5110291e6ee1c31d5b275d01"), 
    "d" : 24, 
    "s" : [ 
     1, 
     2, 
     3 
    ] 
} 
{ 
    "_id" : ObjectId("511029266ee1c31d5b275d02"), 
    "d" : 24, 
    "s" : [ 
     4, 
     5, 
     6 
    ] 
} 
{ 
    "_id" : ObjectId("5110292e6ee1c31d5b275d03"), 
    "d" : 24, 
    "s" : [ 
     7, 
     8 
    ] 
} 

Questa la domanda che voglio correre:

mongo = get_collection(self.collection_name) 
res = mongo.find().sort([('_id', -1)]).skip(1).limit(1) 

get_collection() è un metodo di supporto che Ho fatto. Scorrere il cursore, res, produce un solo documento:

res = mongo.find().sort([('_id', -1)]).skip(1).limit(1) 
for document in res: 
    print document 

> {u's': [4.0, 5.0, 6.0], u'_id': ObjectId('511029266ee1c31d5b275d02'), u'd': 24.0} 

Tuttavia, l'accesso res utilizzando compensazioni restituisce due documenti differenti per la 0a e 1 ° elemento:

res = mongo.find().sort([('_id', -1)]).skip(1).limit(1) 
pprint(res[0]) 
> {u'_id': ObjectId('511029266ee1c31d5b275d02'), u'd': 24.0, u's': [4.0, 5.0, 6.0]} 
pprint(res[1]) 
> {u'_id': ObjectId('5110291e6ee1c31d5b275d01'), u'd': 24.0, u's': [1.0, 2.0, 3.0]} 

questo è un bug? limit(1) dovrebbe restituire solo un risultato, no?

risposta

11

Il docs dice di accesso indice di un cursore:

Qualsiasi limite precedentemente applicato a questo cursore viene ignorato.