2013-02-05 16 views
10

Są to wszystkie dokumenty w mojej kolekcji:Pymongo granica kursora (1) zwraca więcej niż 1 wynik

{ 
    "_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 
    ] 
} 

Ta kwerenda chcę uruchomić:

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

get_collection() jest metoda pomocnika że Zrobiłem. Iteracja nad kursorem, res, produkuje tylko jeden dokument:

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} 

jednak dostęp res pomocą przesunięcia zwraca dwa różne dokumenty dotyczące 0TH i 1 element:

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]} 

Jest to błąd? limit(1) powinien zwracać tylko jeden wynik, nie?

Odpowiedz

11

docs mówi o dostępie indeksu kursora:

Każdy termin poprzednio stosowane do tego kursora zostanie zignorowany.

Powiązane problemy