Limits and Skips with Sorts, Oh My!

Introduction to MongoDB in Python

Donny Winston

Instructor

Limiting our exploration

for doc in db.prizes.find({}, ["laureates.share"]):
    share_is_three = [laureate["share"] == "3"
                      for laureate in doc["laureates"]]
    assert all(share_is_three) or not any(share_is_three)
for doc in db.prizes.find({"laureates.share": "3"}):
    print("{year} {category}".format(**doc))
2017 chemistry
2017 medicine
2016 chemistry
2015 chemistry
2014 physics
2014 chemistry
2013 chemistry
...
for doc in db.prizes.find({"laureates.share": "3"}, limit=3):
    print("{year} {category}".format(**doc))
2017 chemistry
2017 medicine
2016 chemistry
Introduction to MongoDB in Python

Skips and paging through results

for doc in db.prizes.find({"laureates.share": "3"}, limit=3):
    print("{year} {category}".format(**doc))
2017 chemistry
2017 medicine
2016 chemistry
for doc in db.prizes.find({"laureates.share": "3"}, skip=3, limit=3):
    print("{year} {category}".format(**doc))
2015 chemistry
2014 physics
2014 chemistry
for doc in db.prizes.find({"laureates.share": "3"}, skip=6, limit=3):
    print("{year} {category}".format(**doc))
2013 chemistry
2013 medicine
2013 economics
Introduction to MongoDB in Python

Using cursor methods for {sort, skip, limit}

for doc in db.prizes.find({"laureates.share": "3"}).limit(3):
    print("{year} {category}".format(**doc))
2017 chemistry
2017 medicine
2016 chemistry
for doc in (db.prizes.find({"laureates.share": "3"}).skip(3).limit(3)):
    print("{year} {category}".format(**doc))
2015 chemistry
2014 physics
2014 chemistry
for doc in (db.prizes.find({"laureates.share": "3"})
            .sort([("year", 1)])
            .skip(3)
            .limit(3)):
    print("{year} {category}".format(**doc))
1954 medicine
1956 physics
1956 medicine
Introduction to MongoDB in Python

Simpler sorts of sort

cursor1 = (db.prizes.find({"laureates.share": "3"}).skip(3).limit(3)
          .sort([("year", 1)]))
cursor2 = (db.prizes.find({"laureates.share": "3"}).skip(3).limit(3)
          .sort("year", 1))
cursor3 = (db.prizes.find({"laureates.share": "3"}).skip(3).limit(3)
          .sort("year"))
docs = list(cursor1)
assert docs == list(cursor2) == list(cursor3)
for doc in docs:
    print("{year} {category}".format(**doc))
1954 medicine
1956 physics
1956 medicine
doc = db.prizes.find_one({"laureates.share": "3"},
                         skip=3, sort=[("year", 1)])
print("{year} {category}".format(**doc))
1954 medicine
Introduction to MongoDB in Python

Limit or Skip Practice? Exactly.

Introduction to MongoDB in Python

Preparing Video For Download...