diff options
-rw-r--r-- | src/mango/src/mango_idx_text.erl | 2 | ||||
-rw-r--r-- | src/mango/test/07-text-custom-field-list-test.py | 18 |
2 files changed, 12 insertions, 8 deletions
diff --git a/src/mango/src/mango_idx_text.erl b/src/mango/src/mango_idx_text.erl index 4710d5f7f..f90ac7fac 100644 --- a/src/mango/src/mango_idx_text.erl +++ b/src/mango/src/mango_idx_text.erl @@ -307,7 +307,7 @@ indexable_fields(Fields, {op_or, [{op_field, Field0}, {op_field, {[Name | _], _}} = Field1]}) -> case lists:member(<<"[]">>, Name) of true -> - indexable_fields(Fields, Field1); + indexable_fields(Fields, {op_field, Field0}); false -> Fields1 = indexable_fields(Fields, {op_field, Field0}), indexable_fields(Fields1, Field1) diff --git a/src/mango/test/07-text-custom-field-list-test.py b/src/mango/test/07-text-custom-field-list-test.py index 4db11a5af..50a5c0522 100644 --- a/src/mango/test/07-text-custom-field-list-test.py +++ b/src/mango/test/07-text-custom-field-list-test.py @@ -64,6 +64,16 @@ class CustomFieldsTest(mango.UserDocsTextTests): docs = self.db.find({"favorites": {"$in": vals}}) assert len(docs) == 10 + def test_in_with_array_not_explicit(self): + agelist = [22, 51] + statelist = ["New Hampshire"] + docs = self.db.find({"age": {"$in": agelist}}) + docs2 = self.db.find({"location.state": {"$in": statelist}}) + docs3 = self.db.find({"age": {"$in": statelist}}) + assert len(docs) == 2 + assert len(docs2) == 1 + assert len(docs3) == 0 + # This should also throw an error because we only indexed # favorites.[] of type string. For the following query to work, the # user has to index favorites.[] of type number, and also @@ -75,16 +85,10 @@ class CustomFieldsTest(mango.UserDocsTextTests): except Exception, e: assert e.response.status_code == 400 - # This test differs from the situation where we index everything. - # When we index everything the actual number of docs that gets - # returned is 5. That's because of the special situation where we - # have an array of an array, i.e: [["Lisp"]], because we're indexing - # specifically favorites.[] of type string. So it does not count - # the example and we only get 4 back. def test_nin_with_array(self): vals = ["Lisp", "Python"] docs = self.db.find({"favorites": {"$nin": vals}}) - assert len(docs) == 4 + assert len(docs) == 5 def test_missing(self): self.db.find({"location.state": "Nevada"}) |