Skip to content

Commit fc53f56

Browse files
committed
Add len lookup
1 parent 81e41f0 commit fc53f56

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
@@ -254,6 +254,28 @@ def test_filter_with_embeddedfield_array_path(self):
254254
[self.lost_empires],
255255
)
256256

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

258280
class QueryingTests(TestCase):
259281
@classmethod

0 commit comments

Comments
 (0)