首页 > 数据库技术 > 详细

小脚本--利用运算符重载简化MongoDB的命令

时间:2018-09-26 18:50:16      阅读:188      评论:0      收藏:0      [点我收藏+]

因为每次输入MongoDB的命令都很复杂,老把自己绕迷糊了,所以写了这个小脚本

哪里有不正确,请多多指正。新手求教

 


1
class ff(object): 2 def __init__(self,qq): 3 self.qq = qq 4 def __gt__(self,qq):# > 5 return ff({$gt:{self.qq:qq.qq}}) 6 7 def __lt__(self,qq):# < 8 return ff({$lt:{self.qq:qq.qq}}) 9 10 def __eq__(self,qq):# == 11 return ff({$eq:{self.qq:qq.qq}}) 12 13 def __and__(self,qq):# & 14 return ff({$and:[self.qq,qq.qq]}) 15 16 def __or__(self,qq):# | 17 return ff({$or:[self.qq,qq.qq]}) 18 19 def __le__(self, qq): # self <= rhs 小于等于 20 21 return ff({$lte:{self.qq:qq.qq}}) 22 23 def __ge__(self, qq):# self >= rhs 大于等于 24 25 return ff({$gte:{self.qq:qq.qq}}) 26 27 def __ne__(self, qq): # self != rhs 不等于 28 29 return ff({$ne:{self.qq:qq.qq}}) 30 31 def __ior__(self, qq):# self |= rhs 即不也不 32 33 return ff({$nor:[self.qq,qq.qq]}) 34 35 def __invert__(self):# ~self 取反 36 return ff({$not:self.qq}) 37 38 # 类方法,将所有变量变成类ff类型的变量,以便于使用运算符重载 39 @classmethod 40 def oo(als,a): 41 i = 0 42 b = ‘‘ 43 c = ‘‘ 44 while i < len(a): 45 if a[i] not in "~!&|()><=": 46 while True: 47 if i == len(a)-1: 48 c += a[i] 49 b += ff( + c + ) 50 i+=1 51 break 52 elif a[i] in "~!&|()><=": 53 if c: 54 b += ff( + c + ) 55 c = ‘‘ 56 break 57 c += a[i] 58 i += 1 59 else: 60 b += a[i] 61 i+=1 62 63 # print(b) # 查看 64 return eval(b).qq 65 66 # a = "‘age‘>1" 67 # print(ff.oo(a)) 68 # a = "(‘age‘!=12)" 69 # print(ff.oo(a)) 70 # a = "(‘age‘==12)" 71 # print(ff.oo(a)) 72 # a = "(‘age‘>23)|(‘age‘<12)" 73 # print(ff.oo(a)) 74 # a = "(‘age‘>12)&(‘age‘<23)" 75 # print(ff.oo(a)) 76 # a = "~((‘age‘>12)&(‘age‘<23))" 77 # print(ff.oo(a)) 78 # a = "((‘age‘>12)&(‘age‘<23))|(‘score‘>90)" 79 # print(ff.oo(a))
80 if __name__ == __main__: 81 print("每个运算单独用括号括起来,例如:((‘age‘>12)&(‘age‘<23))|(‘score‘>90)\n按ctrl + c 结束本程序",) 82 print() 83 while True: 84 a = input("请输入:") 85 try: 86 print(ff.oo(a)) 87 except: 88 print("输入有误,请检查!")

 

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))


# {$gt: {age: 1}}
# {$ne: {age: 12}}
# {$eq: {age: 12}}
# {$or: [{$gt: {age: 23}}, {$lt: {age: 12}}]}
# {$and: [{$gt: {age: 12}}, {$lt: {age: 23}}]}
# {$not: {$and: [{$gt: {age: 12}}, {$lt: {age: 23}}]}}
# {$or: [{$and: [{$gt: {age: 12}}, {$lt: {age: 23}}]}, {$gt:{score: 90}}]}

 

  

因为每次输入MongoDB的命令都很复杂,老把自己绕迷糊了,所以写了这个小脚本

 

哪里有不正确,请多多指正。新手求教

 

 

 

转载请注明出处https://www.cnblogs.com/BanL

 

小脚本--利用运算符重载简化MongoDB的命令

原文:https://www.cnblogs.com/BanL/p/9708531.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!