Thanks for the answer. I also understood something. here is the full code
FILTMAP = {'>=': '$gte', '<=': '$lte', '>': '$gt', '<': '$lt', "!=":"$ne"} CONJUNCTION_MAP = {"AND":"$and", "OR":"$or"} def gen_mongo_filters_json(filters, supplied_key=""): return_dict = {} temp_dict = {} first_key = filters.keys()[0] if first_key == 'OR' or first_key == 'AND': if supplied_key == "": return_dict[CONJUNCTION_MAP[first_key]] = [] else: temp_dict[CONJUNCTION_MAP[first_key]] = [] #return_dict[supplied_key] = temp_dict""" for i in range (len(filters[first_key])): if supplied_key == "": return_dict[CONJUNCTION_MAP[first_key]].append(gen_mongo_filters_json(filters[first_key][i], first_key)) else: for i in range (len(filters[first_key])): temp_dict[CONJUNCTION_MAP[first_key]].append(gen_mongo_filters_json(filters[first_key][i], first_key)) return temp_dict else: operator = filters['operator'] if operator == "=": ret_dict = {filters['column']:filters['value']} return ret_dict else: operator = FILTMAP[operator] ret_dict = {filters['column']:{operator:filters['value']}} return ret_dict return return_dict if __name__ == "__main__": print gen_mongo_filters_json({'OR': [{'AND': [{'column': 'XXX', 'operator': '=', 'value': 'M'}, {'column': 'XXX', 'operator': '=', 'value': 'N'}]}, {'AND': [{'column': 'PPP', 'operator': '=', 'value': 'R'}, {'column': 'DDD', 'operator': '=', 'value': 'T'}]}]}) enter code here
Please let me know your feedback.
I tried it for
{'column': 'YYY', 'operator': '>', 'value': '1000'} {'AND': [{'column': 'XXX', 'operator': '=', 'value': 'M'}, {'column': 'XXX', 'operator': '=', 'value': 'N'}]} {'OR': [{'AND': [{'column': 'XXX', 'operator': '=', 'value': u'M'}, {'column': 'XXX', 'operator': '=', 'value': 'N'}]}, {'column': 'YYY', 'operator': '>=', 'value': '3.0'}]} {'OR': [{'AND': [{'column': 'XXX', 'operator': '=', 'value': u'M'}, {'column': 'XXX', 'operator': '=', 'value': 'N'}]}, {'AND': [{'column': 'PPP', 'operator': '=', 'value': u'R'}, {'column': 'DDD', 'operator': '=', 'value': 'T'}]}]}
and here are the exits
{u'YYY': {u'$gt': u'1000'}} {u'$and': [{u'XXX': u'M'}, {u'XXX': u'N'}]} {u'$or': [{u'$and': [{u'XXX': u'M'}, {u'XXX': u'N'}]}, {u'YYY': {u'$gte': u'3.0'}}]} {u'$or': [{u'$and': [{u'XXX': u'M'}, {u'XXX': u'N'}]}, {u'$and': [{u'PPP': u'R'}, {u'DDD': u'T'}]}]}
Thanks for the answer. Its nice too. I will try now.
And one more thing, I actually omitted the βvalueβ in my sample code. I thank you for that. I already have a means to achieve this. Anyway, thanks.