diff --git a/arango/utils.py b/arango/utils.py index 3804e391..8ad925c5 100644 --- a/arango/utils.py +++ b/arango/utils.py @@ -6,6 +6,7 @@ "is_none_or_str", ] +import json import logging from contextlib import contextmanager from typing import Any, Iterator, Sequence, Union @@ -119,11 +120,5 @@ def build_filter_conditions(filters: Json) -> str: if not filters: return "" - def format_condition(key: str, value: Any) -> str: - if isinstance(value, str): - return f'doc.{key} == "{value}"' - - return f"doc.{key} == {value}" - - conditions = [format_condition(k, v) for k, v in filters.items()] + conditions = [f"doc.{k} == {json.dumps(v)}" for k, v in filters.items()] return "FILTER " + " AND ".join(conditions) diff --git a/tests/test_document.py b/tests/test_document.py index 129ddeb1..82110594 100644 --- a/tests/test_document.py +++ b/tests/test_document.py @@ -1175,6 +1175,12 @@ def test_document_find(col, bad_col, docs): assert len(found) == 1 assert found[0]["_key"] == "1" + # Test find with dict value with None + data = {"dict": {"foo": "bar", "foo_2": None}} + col.insert(data) + found = list(col.find(data)) + assert len(found) == 1 + # Test find with multiple conditions found = list(col.find({"val": 2, "text": "foo"})) assert len(found) == 1