defST():#这里单独又执行了连接数据库的操作
conn=MongoClient("localhost")
db=conn.Tools
set1=db.data
res = set1.find()for row in res:for i,j in row.items():print(i,";",j)
3.查询单条信息
#查询单行信息,这里做的是不管你输入什么字段,多少个字段的数据都能查出,不完整数据也可以,但是需要将数据放到一个字典作为参数传入。defSearch(dict):#连接数据库,上面的方式和这种方式都可以
conn = MongoClient("localhost")
db = conn["Tools"]
set1 = db["data"]#将字典中的每个字段都作为查找依据
lista=[]
listb=[]for i,j indict.items():
lista.append(i)#存放字典的键
listb.append(j)#存放字典的值
Slist=[]for q inrange(len(lista)):#这里单独将id拿出来是因为id字段不会重复,按id查询结果肯定只有一条,查到了就可以返回,节省时间if lista[q]=='_id':try:
res=set1.find({lista[q]:listb[q]})
list1=[]
list1.append(res[0])return list1
except:return[]
res=set1.find()for row in res:for i, j in row.items():#str.find(a,b)能够判断b是否是a的子串,如果是字串则返回b在a中的位置,不是则返回-1.所以即使输入的是不完整信息也能够实现查询if i==lista[q]andstr.find(j,listb[q])!=-1:
Slist.append(row)#下面做的是删除掉查询中查到多次的信息。因为上面的是可以分别根据所给的每个字段查询一遍,最终给出的是并集,可能会有重复。(过程繁琐,可删)
l=[]
ll=[]for i in Slist:
l.append(i['_id'])#列表去重并保持原顺序不变
lq =list(set(l))
lq.sort(key=l.index)
j=0for i in Slist:if i['_id']== lq[j]:
ll.append(i)
j +=1else:passiflen(ll)==0:returnFalse, ll
else:returnTrue, ll
4.增加信息
#这里用户不增加完整的信息,只增加几条字段也可以(但必须有id号),同样需要传入字典defAdd(dict):#这个字典是一个包含所有键值的字典,当用户输入不完整信息,比如他只输入一个ToolName和id。那么其他的值自动补上Unknown
aaaa ={'_id':'Unknown','ToolName':'Unknown','ToolIntroduc':'Unknown','ToolURL':'Unknown','ToolColumns':'Unknown','ToolKeyword':'Unknown'}for i, j indict.items():
aaaa[i]= j
#连接数据库
conn = MongoClient("localhost")
db = conn["Database"]
set1 = db["data"]
res = set1.find()
flag=1for row in res:if row['_id']== aaaa['_id']:
flag=0if flag==1:
set1.insert_one(aaaa)print('增加成功!')else:print('增加失败!')#当新增的id号在数据库中已经存在,则不添加进去
5.删除信息
#输入ID号直接删除defDelete(ID):
conn = MongoClient("localhost")
db = conn["Tools"]
set1 = db["data"]try:
res = set1.find({"_id": ID})
set1.delete_one(res[0])print("删除成功!")except:print("删除失败!")