Skip to content

Commit 950cf2d

Browse files
committed
Add len lookup
1 parent a4a2935 commit 950cf2d

File tree

2 files changed

+23
-1
lines changed

2 files changed

+23
-1
lines changed

django_mongodb_backend/fields/array.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -338,7 +338,7 @@ class ArrayLenTransform(Transform):
338338

339339
def as_mql(self, compiler, connection):
340340
lhs_mql = process_lhs(self, compiler, connection)
341-
return {"$cond": {"if": {"$eq": [lhs_mql, None]}, "then": None, "else": {"$size": lhs_mql}}}
341+
return {"$cond": {"if": {"$isArray": lhs_mql}, "then": {"$size": lhs_mql}, "else": None}}
342342

343343

344344
@ArrayField.register_lookup

tests/model_fields_/test_embedded_model.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -255,6 +255,28 @@ def test_filter_with_embeddedfield_array_path(self):
255255
[self.lost_empires],
256256
)
257257

258+
def test_len(self):
259+
self.assertCountEqual(MuseumExhibit.objects.filter(sections__len=10), [])
260+
self.assertCountEqual(
261+
MuseumExhibit.objects.filter(sections__len=1), [self.egypt, self.new_descoveries]
262+
)
263+
# Nested EMF
264+
self.assertCountEqual(
265+
MuseumExhibit.objects.filter(main_section__artifacts__len=1), [self.lost_empires]
266+
)
267+
self.assertCountEqual(MuseumExhibit.objects.filter(main_section__artifacts__len=2), [])
268+
self.assertCountEqual(MuseumExhibit.objects.filter(main_section__artifacts__len=2), [])
269+
# Nested Indexed Array
270+
self.assertCountEqual(
271+
MuseumExhibit.objects.filter(sections__0__artifacts__len=2), [self.wonders]
272+
)
273+
self.assertCountEqual(
274+
MuseumExhibit.objects.filter(sections__0__artifacts__len=0), [self.new_descoveries]
275+
)
276+
self.assertCountEqual(
277+
MuseumExhibit.objects.filter(sections__1__artifacts__len=1), [self.wonders]
278+
)
279+
258280

259281
class QueryingTests(TestCase):
260282
@classmethod

0 commit comments

Comments
 (0)