I am looking to implement AND and OR logic in my Django query but after checking a lot of posts and searching I found that I can not implement AND-OR logic in the same query filter.
Here is what I want to achieve
I want to fetch records which have key ABC AND values Value1 OR Values2 OR Values3 AND key CDE AND values Value4
I am using python3.6, django1.11, mongoengine, and MongoDB
filter = [ { "Key": "ABC", "Values": ["Value1", "Value2", "Value3"]}, { "Key": "CDE", "Values": ["Value4"]} ]
Response:
[
{
"_id" : ObjectId("5ebd29286310619f046ba866"),
"account_id" : "12",
"key" : "ABC",
"Value" : "Value1"
}
{
"_id" : ObjectId("5ebd29286310619f046ba866"),
"account_id" : "12",
"key" : "ABC",
"Value" : "Value2"
}
{
"_id" : ObjectId("5ebd29286310619f046ba866"),
"account_id" : "12",
"key" : "ABC",
"Value" : "Value3"
}
{
"_id" : ObjectId("5ebd29286310619f046ba866"),
"account_id" : "12",
"key" : "CDE",
"Value" : "Value4"
}
]
This is what I have already tried but got an error mongoengine.errors.InvalidQueryError: Cannot resolve field "key"
from mongoengine.queryset.visitor import Q
records = MyModel.objects.get(Q(key__exact='ABC'),
Q(Value__exact='Value1') | Q(Value__exact='Value2') | Q(Value__exact='Value3', Q(key__exact='CDE'), Q(Value__exact='Value4')))