2013-02-05 5 views
10

Diese sind alle Dokumente in meiner Sammlung:Pymongo Cursor Grenze (1) liefert mehr als 1 Ergebnis

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

Dies ist die Abfrage, die ich ausführen möchten:

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

get_collection() ist eine Hilfsmethode, dass Ich habe gemacht. nur ein Dokument Iterieren über die Cursor, res produziert:

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} 

jedoch Zugriff auf res Offsets gibt zwei verschiedene Dokumente für die 0-te und erste Element mit:

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

Ist das ein Fehler? limit(1) sollte nur ein Ergebnis zurückgeben, nein?

Antwort

11

Die docs sagt über Indexzugriff eines Cursors:

Jede Grenze vorher auf diesen Cursor angewendet wird ignoriert.