Skip to content

Commit 74270b3

Browse files
author
Arpit
committed
Added support to fetch latest object from mongoengine queryset
1 parent 090e6e1 commit 74270b3

File tree

2 files changed

+30
-0
lines changed

2 files changed

+30
-0
lines changed

mongoengine/queryset/base.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -298,6 +298,18 @@ def first(self):
298298
result = None
299299
return result
300300

301+
def last(self, *ordering_keys):
302+
"""Retrieve the latest object matching the query.
303+
304+
:param keys: fields to order the query results by; keys may be
305+
prefixed with "+" or a "-" to determine the ordering direction.
306+
307+
"""
308+
if not ordering_keys:
309+
ordering_keys = "-id"
310+
311+
return self.order_by(ordering_keys).first()
312+
301313
def insert(
302314
self, doc_or_docs, load_bulk=True, write_concern=None, signal_kwargs=None
303315
):

tests/queryset/test_queryset.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2599,6 +2599,24 @@ def test_order_by(self):
25992599
ages = [p.age for p in self.Person.objects.order_by("")]
26002600
assert ages == [40, 20, 30]
26012601

2602+
def test_last(self):
2603+
"""Ensure the retieval of the latest object from the QuerySet."""
2604+
person1 = self.Person(name="User B", age=40).save()
2605+
person2 = self.Person(name="User A", age=20).save()
2606+
person3 = self.Person(name="User C", age=30).save()
2607+
2608+
names = [p.name for p in self.Person.objects.last]
2609+
assert names == ["User B", "User C", "User A"]
2610+
assert self.Person.objects.last() == person3
2611+
2612+
person2.age = 31
2613+
person2.save()
2614+
assert self.Person.objects.last() == person3
2615+
2616+
person1.age = 41
2617+
person1.save()
2618+
assert self.Person.objects.last() == person3
2619+
26022620
def test_order_by_optional(self):
26032621
class BlogPost(Document):
26042622
title = StringField()

0 commit comments

Comments
 (0)