因为每次输入MongoDB的命令都很复杂,老把自己绕迷糊了,所以写了这个小脚本
哪里有不正确,请多多指正。新手求教
class ff(object): def __init__(self,qq): self.qq = qq def __gt__(self,qq):# > return ff({ '$gt':{self.qq:qq.qq}}) def __lt__(self,qq):# < return ff({ '$lt':{self.qq:qq.qq}}) def __eq__(self,qq):# == return ff({ '$eq':{self.qq:qq.qq}}) def __and__(self,qq):# & return ff({ '$and':[self.qq,qq.qq]}) def __or__(self,qq):# | return ff({ '$or':[self.qq,qq.qq]}) def __le__(self, qq): # self <= rhs 小于等于 return ff({ '$lte':{self.qq:qq.qq}}) def __ge__(self, qq):# self >= rhs 大于等于 return ff({ '$gte':{self.qq:qq.qq}}) def __ne__(self, qq): # self != rhs 不等于 return ff({ '$ne':{self.qq:qq.qq}}) def __ior__(self, qq):# self |= rhs 即不也不 return ff({ '$nor':[self.qq,qq.qq]}) def __invert__(self):# ~self 取反 return ff({ '$not':self.qq}) # 类方法,将所有变量变成类ff类型的变量,以便于使用运算符重载 @classmethod def oo(als,a): i = 0 b = '' c = '' while i < len(a): if a[i] not in "~!&|()><=": while True: if i == len(a)-1: c += a[i] b += 'ff(' + c + ')' i+=1 break elif a[i] in "~!&|()><=": if c: b += 'ff(' + c + ')' c = '' break c += a[i] i += 1 else: b += a[i] i+=1 # print(b) # 查看 return eval(b).qq# a = "'age'>1"# print(ff.oo(a))# a = "('age'!=12)"# print(ff.oo(a))# a = "('age'==12)"# print(ff.oo(a))# a = "('age'>23)|('age'<12)"# print(ff.oo(a))# a = "('age'>12)&('age'<23)"# print(ff.oo(a))# a = "~(('age'>12)&('age'<23))"# print(ff.oo(a))# a = "(('age'>12)&('age'<23))|('score'>90)"# print(ff.oo(a))if __name__ == '__main__': print("每个运算单独用括号括起来,例如:(('age'>12)&('age'<23))|('score'>90)\n按ctrl + c 结束本程序",) print() while True: a = input("请输入:") try: print(ff.oo(a)) except: print("输入有误,请检查!")复制代码
a = "'age'>1"print(ff.oo(a)) # {'$gt': {'age': 1}}a = "('age'!=12)"print(ff.oo(a)) # {'$ne': {'age': 12}}a = "('age'==12)"print(ff.oo(a)) # {'$eq': {'age': 12}}a = "('age'>23)|('age'<12)"print(ff.oo(a)) # {'$or': [{'$gt': {'age': 23}}, {'$lt': {'age': 12}}]}a = "('age'>12)&('age'<23)"print(ff.oo(a)) # {'$and': [{'$gt': {'age': 12}}, {'$lt': {'age': 23}}]}a = "~(('age'>12)&('age'<23))"print(ff.oo(a)) # {'$not': {'$and': [{'$gt': {'age': 12}}, {'$lt': {'age': 23}}]}}a = "(('age'>12)&('age'<23))|('score'>90)"print(ff.oo(a)) # {'$or': [{'$and': [{'$gt': {'age': 12}}, {'$lt': {'age': 23}}]}, {'$gt':{'score': 90}}]}复制代码
转载请注明出处: