Skip to content

Commit 8f7d201

Browse files
committed
Add len lookup
1 parent 22587d4 commit 8f7d201

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

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

260282
class QueryingTests(TestCase):
261283
@classmethod

0 commit comments

Comments
 (0)