Skip to content

Commit fdf7fda

Browse files
committed
Edits.
1 parent 4db7c9c commit fdf7fda

File tree

4 files changed

+171
-187
lines changed

4 files changed

+171
-187
lines changed

django_mongodb_backend/fields/embedded_model.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -211,8 +211,8 @@ def _get_target_path(self):
211211
def as_mql_expr(self, compiler, connection):
212212
columns, parent_field = self._get_target_path()
213213
mql = parent_field.as_mql(compiler, connection, as_expr=True)
214-
for key in columns:
215-
mql = {"$getField": {"input": mql, "field": key}}
214+
for column in columns:
215+
mql = {"$getField": {"input": mql, "field": column}}
216216
return mql
217217

218218
def as_mql_path(self, compiler, connection):

tests/model_fields_/test_arrayfield.py

Lines changed: 78 additions & 87 deletions
Original file line numberDiff line numberDiff line change
@@ -243,14 +243,24 @@ def test_empty_list(self):
243243
self.assertEqual(obj.field, [])
244244
self.assertEqual(obj.empty_array, [])
245245

246+
def test_exact(self):
247+
with self.assertNumQueries(1) as ctx:
248+
self.assertSequenceEqual(
249+
NullableIntegerArrayModel.objects.filter(field__exact=[1]), self.objs[:1]
250+
)
251+
self.assertAggregateQuery(
252+
ctx.captured_queries[0]["sql"],
253+
"model_fields__nullableintegerarraymodel",
254+
[{"$match": {"field": [1]}}],
255+
)
256+
246257
def test_exact_expr(self):
247258
with self.assertNumQueries(1) as ctx:
248259
self.assertSequenceEqual(
249260
NullableIntegerArrayModel.objects.filter(field__exact=[Value(3) / 3]), self.objs[:1]
250261
)
251-
query = ctx.captured_queries[0]["sql"]
252262
self.assertAggregateQuery(
253-
query,
263+
ctx.captured_queries[0]["sql"],
254264
"model_fields__nullableintegerarraymodel",
255265
[
256266
{
@@ -263,16 +273,6 @@ def test_exact_expr(self):
263273
],
264274
)
265275

266-
def test_exact_path(self):
267-
with self.assertNumQueries(1) as ctx:
268-
self.assertSequenceEqual(
269-
NullableIntegerArrayModel.objects.filter(field__exact=[1]), self.objs[:1]
270-
)
271-
query = ctx.captured_queries[0]["sql"]
272-
self.assertAggregateQuery(
273-
query, "model_fields__nullableintegerarraymodel", [{"$match": {"field": [1]}}]
274-
)
275-
276276
def test_exact_null_only_array(self):
277277
obj = NullableIntegerArrayModel.objects.create(field=[None], field_nested=[None, None])
278278
self.assertSequenceEqual(
@@ -295,9 +295,8 @@ def test_exact_null_only_nested_array(self):
295295
),
296296
[obj1],
297297
)
298-
query = ctx.captured_queries[0]["sql"]
299298
self.assertAggregateQuery(
300-
query,
299+
ctx.captured_queries[0]["sql"],
301300
"model_fields__nullableintegerarraymodel",
302301
[{"$match": {"field_nested": [[None, None]]}}],
303302
)
@@ -308,9 +307,8 @@ def test_exact_null_only_nested_array(self):
308307
),
309308
[obj2],
310309
)
311-
query = ctx.captured_queries[0]["sql"]
312310
self.assertAggregateQuery(
313-
query,
311+
ctx.captured_queries[0]["sql"],
314312
"model_fields__nullableintegerarraymodel",
315313
[{"$match": {"field_nested": [[None, None], [None, None]]}}],
316314
)
@@ -321,9 +319,10 @@ def test_exact_with_expression(self):
321319
NullableIntegerArrayModel.objects.filter(field__exact=[Value(1)]),
322320
self.objs[:1],
323321
)
324-
query = ctx.captured_queries[0]["sql"]
325322
self.assertAggregateQuery(
326-
query, "model_fields__nullableintegerarraymodel", [{"$match": {"field": [1]}}]
323+
ctx.captured_queries[0]["sql"],
324+
"model_fields__nullableintegerarraymodel",
325+
[{"$match": {"field": [1]}}],
327326
)
328327

329328
def test_exact_charfield(self):
@@ -341,22 +340,31 @@ def test_isnull(self):
341340
self.assertSequenceEqual(
342341
NullableIntegerArrayModel.objects.filter(field__isnull=True), self.objs[-1:]
343342
)
344-
query = ctx.captured_queries[0]["sql"]
345343
self.assertAggregateQuery(
346-
query,
344+
ctx.captured_queries[0]["sql"],
347345
"model_fields__nullableintegerarraymodel",
348346
[{"$match": {"$or": [{"field": {"$exists": False}}, {"field": None}]}}],
349347
)
350348

349+
def test_gt(self):
350+
with self.assertNumQueries(1) as ctx:
351+
self.assertSequenceEqual(
352+
NullableIntegerArrayModel.objects.filter(field__gt=Array(0)), self.objs[:4]
353+
)
354+
self.assertAggregateQuery(
355+
ctx.captured_queries[0]["sql"],
356+
"model_fields__nullableintegerarraymodel",
357+
[{"$match": {"field": {"$gt": [0]}}}],
358+
)
359+
351360
def test_gt_expr(self):
352361
with self.assertNumQueries(1) as ctx:
353362
self.assertSequenceEqual(
354363
NullableIntegerArrayModel.objects.filter(field__gt=Array(Value(0) * 3)),
355364
self.objs[:4],
356365
)
357-
query = ctx.captured_queries[0]["sql"]
358366
self.assertAggregateQuery(
359-
query,
367+
ctx.captured_queries[0]["sql"],
360368
"model_fields__nullableintegerarraymodel",
361369
[
362370
{
@@ -369,14 +377,24 @@ def test_gt_expr(self):
369377
],
370378
)
371379

372-
def test_gt_path(self):
380+
def test_lt(self):
373381
with self.assertNumQueries(1) as ctx:
374382
self.assertSequenceEqual(
375-
NullableIntegerArrayModel.objects.filter(field__gt=Array(0)), self.objs[:4]
383+
NullableIntegerArrayModel.objects.filter(field__lt=[2]), self.objs[:1]
376384
)
377-
query = ctx.captured_queries[0]["sql"]
378385
self.assertAggregateQuery(
379-
query, "model_fields__nullableintegerarraymodel", [{"$match": {"field": {"$gt": [0]}}}]
386+
ctx.captured_queries[0]["sql"],
387+
"model_fields__nullableintegerarraymodel",
388+
[
389+
{
390+
"$match": {
391+
"$and": [
392+
{"field": {"$lt": [2]}},
393+
{"$and": [{"field": {"$exists": True}}, {"field": {"$ne": None}}]},
394+
]
395+
}
396+
}
397+
],
380398
)
381399

382400
def test_lt_expr(self):
@@ -385,9 +403,8 @@ def test_lt_expr(self):
385403
NullableIntegerArrayModel.objects.filter(field__lt=Array(Value(1) + 1)),
386404
self.objs[:1],
387405
)
388-
query = ctx.captured_queries[0]["sql"]
389406
self.assertAggregateQuery(
390-
query,
407+
ctx.captured_queries[0]["sql"],
391408
"model_fields__nullableintegerarraymodel",
392409
[
393410
{
@@ -410,25 +427,16 @@ def test_lt_expr(self):
410427
],
411428
)
412429

413-
def test_lt_path(self):
430+
def test_in(self):
414431
with self.assertNumQueries(1) as ctx:
415432
self.assertSequenceEqual(
416-
NullableIntegerArrayModel.objects.filter(field__lt=[2]), self.objs[:1]
433+
NullableIntegerArrayModel.objects.filter(field__in=[[1], [2]]),
434+
self.objs[:2],
417435
)
418-
query = ctx.captured_queries[0]["sql"]
419436
self.assertAggregateQuery(
420-
query,
437+
ctx.captured_queries[0]["sql"],
421438
"model_fields__nullableintegerarraymodel",
422-
[
423-
{
424-
"$match": {
425-
"$and": [
426-
{"field": {"$lt": [2]}},
427-
{"$and": [{"field": {"$exists": True}}, {"field": {"$ne": None}}]},
428-
]
429-
}
430-
}
431-
],
439+
[{"$match": {"field": {"$in": ([1], [2])}}}],
432440
)
433441

434442
def test_in_expr(self):
@@ -439,9 +447,8 @@ def test_in_expr(self):
439447
),
440448
self.objs[:2],
441449
)
442-
query = ctx.captured_queries[0]["sql"]
443450
self.assertAggregateQuery(
444-
query,
451+
ctx.captured_queries[0]["sql"],
445452
"model_fields__nullableintegerarraymodel",
446453
[
447454
{
@@ -460,19 +467,6 @@ def test_in_expr(self):
460467
],
461468
)
462469

463-
def test_in_path(self):
464-
with self.assertNumQueries(1) as ctx:
465-
self.assertSequenceEqual(
466-
NullableIntegerArrayModel.objects.filter(field__in=[[1], [2]]),
467-
self.objs[:2],
468-
)
469-
query = ctx.captured_queries[0]["sql"]
470-
self.assertAggregateQuery(
471-
query,
472-
"model_fields__nullableintegerarraymodel",
473-
[{"$match": {"field": {"$in": ([1], [2])}}}],
474-
)
475-
476470
def test_in_subquery(self):
477471
IntegerArrayModel.objects.create(field=[2, 3])
478472
self.assertSequenceEqual(
@@ -514,15 +508,26 @@ def test_contained_by_including_F_object(self):
514508
self.objs[:3],
515509
)
516510

511+
def test_contains(self):
512+
with self.assertNumQueries(1) as ctx:
513+
self.assertSequenceEqual(
514+
NullableIntegerArrayModel.objects.filter(field__contains=[2]),
515+
self.objs[1:3],
516+
)
517+
self.assertAggregateQuery(
518+
ctx.captured_queries[0]["sql"],
519+
"model_fields__nullableintegerarraymodel",
520+
[{"$match": {"field": {"$all": [2]}}}],
521+
)
522+
517523
def test_contains_expr(self):
518524
with self.assertNumQueries(1) as ctx:
519525
self.assertSequenceEqual(
520526
NullableIntegerArrayModel.objects.filter(field__contains=[Value(1) + 1]),
521527
self.objs[1:3],
522528
)
523-
query = ctx.captured_queries[0]["sql"]
524529
self.assertAggregateQuery(
525-
query,
530+
ctx.captured_queries[0]["sql"],
526531
"model_fields__nullableintegerarraymodel",
527532
[
528533
{
@@ -544,17 +549,6 @@ def test_contains_expr(self):
544549
],
545550
)
546551

547-
def test_contains_path(self):
548-
with self.assertNumQueries(1) as ctx:
549-
self.assertSequenceEqual(
550-
NullableIntegerArrayModel.objects.filter(field__contains=[2]),
551-
self.objs[1:3],
552-
)
553-
query = ctx.captured_queries[0]["sql"]
554-
self.assertAggregateQuery(
555-
query, "model_fields__nullableintegerarraymodel", [{"$match": {"field": {"$all": [2]}}}]
556-
)
557-
558552
def test_contains_subquery(self):
559553
IntegerArrayModel.objects.create(field=[2, 3])
560554
inner_qs = IntegerArrayModel.objects.values_list("field", flat=True)
@@ -596,9 +590,8 @@ def test_icontains(self):
596590
self.assertSequenceEqual(
597591
CharArrayModel.objects.filter(field__icontains="foo"), [instance]
598592
)
599-
query = ctx.captured_queries[0]["sql"]
600593
self.assertAggregateQuery(
601-
query,
594+
ctx.captured_queries[0]["sql"],
602595
"model_fields__chararraymodel",
603596
[{"$match": {"field": {"$regex": "foo", "$options": "i"}}}],
604597
)
@@ -661,15 +654,26 @@ def test_index_used_on_nested_data(self):
661654
NestedIntegerArrayModel.objects.filter(field__0=[1, 2]), [instance]
662655
)
663656

657+
def test_overlap(self):
658+
with self.assertNumQueries(1) as ctx:
659+
self.assertSequenceEqual(
660+
NullableIntegerArrayModel.objects.filter(field__overlap=[1, 2]),
661+
self.objs[0:3],
662+
)
663+
self.assertAggregateQuery(
664+
ctx.captured_queries[0]["sql"],
665+
"model_fields__nullableintegerarraymodel",
666+
[{"$match": {"field": {"$in": [1, 2]}}}],
667+
)
668+
664669
def test_overlap_expr(self):
665670
with self.assertNumQueries(1) as ctx:
666671
self.assertSequenceEqual(
667672
NullableIntegerArrayModel.objects.filter(field__overlap=[1, Value(1) + 1]),
668673
self.objs[0:3],
669674
)
670-
query = ctx.captured_queries[0]["sql"]
671675
self.assertAggregateQuery(
672-
query,
676+
ctx.captured_queries[0]["sql"],
673677
"model_fields__nullableintegerarraymodel",
674678
[
675679
{
@@ -695,19 +699,6 @@ def test_overlap_expr(self):
695699
],
696700
)
697701

698-
def test_overlap_path(self):
699-
with self.assertNumQueries(1) as ctx:
700-
self.assertSequenceEqual(
701-
NullableIntegerArrayModel.objects.filter(field__overlap=[1, 2]),
702-
self.objs[0:3],
703-
)
704-
query = ctx.captured_queries[0]["sql"]
705-
self.assertAggregateQuery(
706-
query,
707-
"model_fields__nullableintegerarraymodel",
708-
[{"$match": {"field": {"$in": [1, 2]}}}],
709-
)
710-
711702
def test_index_annotation(self):
712703
qs = NullableIntegerArrayModel.objects.annotate(second=models.F("field__1"))
713704
self.assertCountEqual(

0 commit comments

Comments
 (0)