孤荷凌寒自学python第六十六天学习mongoDB的基本操作并进行简单封装5并学习权限设置

(完整学习过程屏幕记录视频地址在文末)

今天是学习mongoDB数据库的第十二天。

今天继续学习mongoDB的简单操作,并继续对一些可能反复经常使用的操作进行简单的封装。同时通过搜索了解了如何对本地Mongo数据库进行权限设置(没有实践本地数据库的用户权限设置。)

按个人规划,今天是初步了解学习MongoDb数据库的最后一个学习日,后续将在真正使用此数据库时,再对其进行深入研究。

一、今天完成了两个可能会经常使用的函数。

```

#将传入的cursor对象中的全部记录的_id值提取出来存入一个列表中返回

def getAll_idInCurSorGhlh(cursor,isShowMsg=False):

'''

将传入的cursor对象中的全部记录的_id值提取出来存入一个列表中返回

'''

lstR=[]

try:

for i in cursor:

strid=i.get('_id')

if strid!=None:

lstR.append(strid)

return lstR

#---------------------------------------------------------------------------

except Exception as e:

mmongoErrString='获取mongoDb数据记录集(cursor)的所有记录中的_id值列表时出错:' + str(e) + '\n此函数由【孤荷凌寒】创建,QQ578652607'

if isShowMsg==True:

msgbox(mmongoErrString)

lstR=[]

return lstR

else:

pass

finally:

pass

#将只有一个字段筛选条件的查询结果的所有记录中的_id值提出出来存入一个列表中返回

def findDataAndReturn_idListGhlh(objjh,strkeynm,value,strbijiao='',isShowMsg=False):

'''

将只有一个字段筛选条件的查询结果的所有记录中的_id值提出出来存入一个列表中返回

'''

try:

data=findDataGhlh(objjh,strkeynm,value,strbijiao,False,isShowMsg)

return getAll_idInCurSorGhlh(data,isShowMsg)

#-------------------------------------------

except Exception as e:

mmongoErrString='获取mongoDb数据库中符合单一筛选条件的所有记录中的_id值列表时出错:' + str(e) + '\n此函数由【孤荷凌寒】创建,QQ578652607'

if isShowMsg==True:

msgbox(mmongoErrString)

lstR=[]

return lstR

else:

pass

finally:

pass

```

这所以要创建这两个函数,我的设想是,因为在修改和查询时使用标识操作字符加到字典对象中,由于mongoDB的标识操作关键字特别多,不好记忆,容易写错,因此,如果我能分散这些步骤,当然这会降低程序的执行效率,但更便于理解 ,相比非常复杂且书写得很长的各种嵌套的字典对象来说,更不容易出错。

这两个函数的核心理念是,因为任何一条记录(就是document对象)其中唯一标识的字段是【_id】,所以,为了简化操作,把所有查询得到的记录集或其它方法得到的记录集,都归集到只使用这个唯一标识的字段【_id】来进行识别和定位,那么将大大减轻理解难度和书写复杂度,当然会降低执行效率。

这是我的想法。

 

 

二、今天的测试文档

【ceshi.py】

```

from pymongo import MongoClient

import datetime

import _mty

import _mf

import _mre

import _cl

import _mmongo

def msgbox(info,titletext='孤荷凌寒的对话框QQ578652607',style=0,isShowErrMsg=False):

return _mty.msgboxGhlh(info,titletext,style,isShowErrMsg)

def thirdConnect():

#--获取授权用户和密码:

#stru=_mf.readAllTextFromTxtFileGhlh('u.txt')

#strp=_mf.readAllTextFromTxtFileGhlh('p.txt')

#得到连接对象

client=_mmongo.conMongoDbGhlh("localhost")

#-- 获取数据库的命名标识

db=client.ghlhsecond

#--获取其中的一个集合对象

jh=db.onejh

#----添加记录

dicA={

u'姓名':u'张三3',

u'性别':u'男',

u'年龄':36,

u'婚否':True

}

dicB={

u'姓名':u'李四3',

u'性别':u'女',

u'年龄':32,

u'婚否':False

}

lstA=[dicA,dicB]

#------

#isok=_mmongo.addNewDataGhlh(jh,lstA)

#msgbox(str(isok))

#删除记录的操作

#isok=_mmongo.delDataGhlh(jh,'体重',98,">=")

#msgbox(str(isok))

#--查询这个集合其中的记录

#data=jh.find()

#for i in data:

#    msgbox(str(i))

#data=_mmongo.findDataGhlh(jh,'姓名','张三.?','正则',True,True)

#print(data)

#for i in data:

#    msgbox(str(i))

#lstA=_mmongo.getAll_idInCurSorGhlh(data)

lstA=_mmongo.findDataAndReturn_idListGhlh(jh,'姓名','张三.?','正则')

for i in lstA:

msgbox(i)

#data=_mmongo.modifyValueGhlh(jh,'姓名','李四.?',{'体重':98,'婚否':True},'正则',False,True)

#print(data)

#for i in data:

#    msgbox(str(i))

thirdConnect()

```

三、今天修改了自定义的模块中存放自己简单封装的一些函数等:

【_mmongo.py】

```

#!/usr/bin/env python3

# -*- coding: utf-8 -*-

#此模块用于封闭mongodb数据库操作的一些方法

import string

import pymongo

import _mty

import _cl #常用常量模块

import _mre

mmongoErrString='' #供其它模块使用的全局变量了,实时保存了各函数执行时的错误信息

def msgbox(info,titletext='孤荷凌寒的mongodb模块对话框QQ578652607',style=0,isShowErrMsg=False):

return _mty.msgboxGhlh(info,titletext,style,isShowErrMsg)

#获取一个针对mongodb数据库服务的client对象的方法函数

def conMongoDbGhlh(serveraddress,strusername='',strpassword='',strauthMechanism='SCRAM-SHA-1',isconnect=False,isShowMsg=False):

'''

根据传递进函数的mongoDB数据服务器地址来连接,并返回一个client对象

'''

try:

client=None

if strusername=='' or strpassword=='':

#无验证连接方式:

client=pymongo.MongoClient(serveraddress)

else:

#有验证的连接:

client=pymongo.MongoClient(serveraddress,username=strusername,password=strpassword,authMechanism=strauthMechanism,connect=isconnect)

#-----------------------------------

return client

except Exception as e:

mmongoErrString='连接MongoDB数据库【' + serveraddress + '】时出错:' + str(e) + '\n此函数由【孤荷凌寒】创建,QQ578652607'

if isShowMsg==True:

msgbox(mmongoErrString)

return None

else:

pass

finally:

pass

#向指定的集合中添加记录

def addNewDataGhlh(objjh,objdata,isShowMsg=False):

'''

通过指定要添加记录的集合对象和要添加的数据对象(字典或字典组成的列表)来向指定集合添加记录

#objjh 要操作的集合对象

#objdata 要添加的数据,如果传入一个字典对象则是添加一条记录;如果传入一个由多个字典组合成的列表对象,就是同时添加多条记录。

'''

try:

r=objjh.insert(objdata)

if r==None:

return False

else:

return True

except Exception as e:

mmongoErrString='向集合中添加记录时出错:' + str(e) + '\n此函数由【孤荷凌寒】创建,QQ578652607'

if isShowMsg==True:

msgbox(mmongoErrString)

return False

else:

pass

finally:

pass

#----简化查询记录的书写----

def findDataGhlh(objjh,strkeynm,value,strbijiao='',isReturnList=True,isShowMsg=False):

'''

用于指定一个key键名符合条件value的简单查询,只能针对一个键名的值作为筛选条件

*如果是字符串使用大于小于等比较运算则会被 忽略

*value支持使用正则表达式

'''

try:

if strkeynm=='' or value=='':

mmongoErrString='查询集合中符合指定一个条件的记录时出错:必须指明要筛选的键名和键值\n此函数由【孤荷凌寒】创建,QQ578652607'

if isShowMsg==True:

msgbox(mmongoErrString)

return None

#----------------------------------------------------------

dic=None

if strbijiao=='>':

#--大于比较---------------

dic={strkeynm:{'$gt':value}}

elif strbijiao=='>=':

#--大于等于------

dic={strkeynm:{'$gte':value}}

elif strbijiao=='<':

#---小于--------------

dic={strkeynm:{'$lt':value}}

elif strbijiao=='<=':

#---小于等于--------------

dic={strkeynm:{'$lte':value}}

elif strbijiao=='<>' or strbijiao=='!=':

#---不等于--------------

dic={strkeynm:{'$ne':value}}

elif strbijiao=='in' or strbijiao=='within' or strbijiao=='包含' or strbijiao=='包括':

#---in--------------只包含如字符串的一部分的情况,还不能处理

dic={strkeynm:{'$in':value}}

elif strbijiao=='nin' or strbijiao=='without' or strbijiao=='不包含' or strbijiao=='不包括':

#---不等于--------------

dic={strkeynm:{'$nin':value}}

elif strbijiao=='正则' or strbijiao=='正则表达式' or strbijiao=='reg' or strbijiao=='regex':

#---value是一个正则表达式----

dic={strkeynm:{'$regex':value}}

else:

#===等于

dic={strkeynm:value}

#--------------------------------------------

r=objjh.find(dic)

if r==None:

return None

else:

#---现在得到的是一个生成器

#---进行处理,返回为一个列表(可以在参数中加一个开关,看是否返回为一个列表,或直接返回为生成器)

if isReturnList==False:

return r

else:

#----改成列表后再返回 ====

return list(r)

#---------------------------------------------------------------------------

except Exception as e:

mmongoErrString='查询集合中符合指定一个条件的记录时出错:' + str(e) + '\n此函数由【孤荷凌寒】创建,QQ578652607'

if isShowMsg==True:

msgbox(mmongoErrString)

return None

else:

pass

finally:

pass

#根据指定的唯一 的一个筛选Key对应的value查找到记录,并进行值的更改

def modifyValueGhlh(objjh,strkeynm,value,dictnewvalue,strbijiao='',isfugai=False,isaddnew=True,isReturnList=True,isShowMsg=False):

'''

根据指定的唯一 的一个筛选Key对应的value查找到记录,并进行值的更改

此函数默认进行全部符合条件的记录的修改。

#objjh 集合对象

#strkeynm 要作为筛选条件的那个key字段名,

#value 要筛选的值或表达式

#dictnewvalue 要向此记录(文档)中修改或添加的新内容

#strbijiao 查询时要进行的比较运算符号

#isfugai 如果设置为True,则会先删除文档旧的全部记录,只加入dictnewvalue列出记录

#isaddnew 如果设置为True,则原文档没有的字段,而dictnewvalue中有的字段会被新增到文档记录中。

'''

try:

data=findDataGhlh(objjh,strkeynm,value,strbijiao,False,isShowMsg)

if data!=None:

#先取出_id

lstid=[]

for i in data:

strid=i.get('_id')

if strid!=None:

lstid.append(strid)

if isfugai==True:

objjh.update({'_id':strid},dictnewvalue,isfugai)

else:

objjh.update({'_id':strid},{"$set":dictnewvalue},isaddnew)

#------重新取出修改过的那些记录并返回----

return findDataGhlh(objjh,'_id',lstid,'in',isReturnList,isShowMsg)

else:

mmongoErrString='修改集合中符合指定一个条件的记录时出错:没有找到符合条件的记录\n此函数由【孤荷凌寒】创建,QQ578652607'

if isShowMsg==True:

msgbox(mmongoErrString)

return None

#---------------------------------------------------------------------------

except Exception as e:

mmongoErrString='修改集合中符合指定一个条件的记录时出错:' + str(e) + '\n此函数由【孤荷凌寒】创建,QQ578652607'

if isShowMsg==True:

msgbox(mmongoErrString)

return None

else:

pass

finally:

pass

#----简化查询记录并删除----

def delDataGhlh(objjh,strkeynm,value,strbijiao='',isShowMsg=False):

'''

查询符合条件的记录并删除掉。

用于指定一个key键名符合条件value的简单查询,只能针对一个键名的值作为筛选条件

*如果是字符串使用大于小于等比较运算则会被 忽略

*value支持使用正则表达式

'''

try:

if strkeynm=='' or value=='':

mmongoErrString='查询集合中符合指定一个条件的记录并删除记录时出错:必须指明要筛选的键名和键值\n此函数由【孤荷凌寒】创建,QQ578652607'

if isShowMsg==True:

msgbox(mmongoErrString)

return False

#----------------------------------------------------------

if strbijiao=='>':

#--大于比较---------------

dic={strkeynm:{'$gt':value}}

elif strbijiao=='>=':

#--大于等于------

dic={strkeynm:{'$gte':value}}

elif strbijiao=='<':

#---小于--------------

dic={strkeynm:{'$lt':value}}

elif strbijiao=='<=':

#---小于等于--------------

dic={strkeynm:{'$lte':value}}

elif strbijiao=='<>' or strbijiao=='!=':

#---不等于--------------

dic={strkeynm:{'$ne':value}}

elif strbijiao=='in' or strbijiao=='within' or strbijiao=='包含' or strbijiao=='包括':

#---in--------------只包含如字符串的一部分的情况,还不能处理

dic={strkeynm:{'$in':value}}

elif strbijiao=='nin' or strbijiao=='without' or strbijiao=='不包含' or strbijiao=='不包括':

#---不等于--------------

dic={strkeynm:{'$nin':value}}

elif strbijiao=='正则' or strbijiao=='正则表达式' or strbijiao=='reg' or strbijiao=='regex':

#---value是一个正则表达式----

dic={strkeynm:{'$regex':value}}

else:

#===等于

dic={strkeynm:value}

#--------------------------------------------

objjh.remove(dic)

return True

#---------------------------------------------------------------------------

except Exception as e:

mmongoErrString='查询集合中符合指定一个条件的记录并删除时出错:' + str(e) + '\n此函数由【孤荷凌寒】创建,QQ578652607'

if isShowMsg==True:

msgbox(mmongoErrString)

return False

else:

pass

finally:

pass

#将传入的cursor对象中的全部记录的_id值提取出来存入一个列表中返回

def getAll_idInCurSorGhlh(cursor,isShowMsg=False):

'''

将传入的cursor对象中的全部记录的_id值提取出来存入一个列表中返回

'''

lstR=[]

try:

for i in cursor:

strid=i.get('_id')

if strid!=None:

lstR.append(strid)

return lstR

#---------------------------------------------------------------------------

except Exception as e:

mmongoErrString='获取mongoDb数据记录集(cursor)的所有记录中的_id值列表时出错:' + str(e) + '\n此函数由【孤荷凌寒】创建,QQ578652607'

if isShowMsg==True:

msgbox(mmongoErrString)

lstR=[]

return lstR

else:

pass

finally:

pass

#将只有一个字段筛选条件的查询结果的所有记录中的_id值提出出来存入一个列表中返回

def findDataAndReturn_idListGhlh(objjh,strkeynm,value,strbijiao='',isShowMsg=False):

'''

将只有一个字段筛选条件的查询结果的所有记录中的_id值提出出来存入一个列表中返回

'''

try:

data=findDataGhlh(objjh,strkeynm,value,strbijiao,False,isShowMsg)

return getAll_idInCurSorGhlh(data,isShowMsg)

#-------------------------------------------

except Exception as e:

mmongoErrString='获取mongoDb数据库中符合单一筛选条件的所有记录中的_id值列表时出错:' + str(e) + '\n此函数由【孤荷凌寒】创建,QQ578652607'

if isShowMsg==True:

msgbox(mmongoErrString)

lstR=[]

return lstR

else:

pass

finally:

pass

```

——————————

今天整理的学习笔记完成,最后例行说明下我的自学思路:

根据过去多年我自学各种编程语言的经历,认为只有真正体验式,解决实际问题式的学习才会有真正的效果,即让学习实际发生。在2004年的时候我开始在一个乡村小学自学电脑 并学习vb6编程语言,没有学习同伴,也没有高师在上,甚至电脑都是孤岛(乡村那时还没有网络),有的只是一本旧书,在痛苦的自学摸索中,我找到适应自己零基础的学习方法:首先是每读书的一小节就作相应的手写笔记,第二步就是上机测试每一个笔记内容是否实现,其中会发现书中讲的其实有出入或错误,第三步就是在上机测试之后,将笔记改为电子版,形成最终的修订好的正确无误的学习笔记 。

通过反复尝试错误,在那个没有分享与交流的黑暗时期我摸黑学会了VB6,尔后接触了其它语言,也曾听过付费视频课程,结果发现也许自己学历果然太低,就算是零基础的入门课程,其实也难以跟上进度,讲师的教学多数出现对初学者的实际情况并不了解的情况,况且学习者的个体也存在差异呢?当然更可怕的是收费课程的价格往往是自己难以承受的。

于是我的所有编程学习都改为了自学,继续自己的三步学习笔记法的学习之路。

当然自学的最大问题是会走那么多的弯路,没有导师直接输入式的教学来得直接,好在网络给我们带来无限搜索的机会,大家在网络上的学习日志带给我们共享交流的机会,而QQ群等交流平台、网络社区的成立,我们可以一起自学,互相批评交流,也可以获得更有效,更自主的自学成果。

于是我以人生已过半的年龄,决定继续我的编程自学之路,开始学习python,只希望与大家共同交流,一个人的独行是可怕的,只有一群人的共同前进才是有希望的。

诚挚期待您的交流分享批评指点!欢迎联系我加入从零开始的自学联盟。

这个时代互联网成为了一种基础设施的存在,于是本来在孤独学习之路上的我们变得不再孤独,因为网络就是一个新的客厅,我们时刻都可以进行沙龙活动。

非常乐意能与大家一起交流自己自学心得和发现,更希望大家能够对我学习过程中的错误给予指点——是的,这样我就能有许多免费的高师了——这也是分享时代,社区时代带来的好福利,我相信大家会的,是吧!

根据完全共享的精神,开源互助的理念,我的个人自学录制过程是全部按4K高清视频录制的,从手写笔记到验证手写笔记的上机操作过程全程录制,但因为4K高清文件太大均超过5G以上,所以无法上传至网络,如有需要可联系我QQ578652607对传,乐意分享。上传分享到百度网盘的只是压缩后的720P的视频。

我的学习过程录像百度盘地址分享如下:(清晰度:1280x720)

链接:https://pan.baidu.com/s/1AYprOjG3owTEKJA1hwXKUw

提取码:foht

Bilibili:

https://www.bilibili.com/video/av40255775/

喜马拉雅语音笔记:

https://www.ximalaya.com/keji/19103006/152105278

孤荷凌寒自学python第六十六天学习mongoDB的基本操作并进行简单封装5的更多相关文章

  1. 孤荷凌寒自学python第六十三天学习mongoDB的基本操作并进行简单封装2

    孤荷凌寒自学python第六十三天学习mongoDB的基本操作并进行简单封装2 (完整学习过程屏幕记录视频地址在文末) 今天是学习mongoDB数据库的第九天. 今天继续学习mongoDB的简单操作, ...

  2. 孤荷凌寒自学python第六十九天学习并实践beautifulsoup对象用法2

    孤荷凌寒自学python第六十九天学习并实践beautifulsoup对象用法2 (完整学习过程屏幕记录视频地址在文末) 今天继续学习beautifulsoup对象的属性与方法等内容. 一.今天进一步 ...

  3. 孤荷凌寒自学python第六十五天学习mongoDB的基本操作并进行简单封装4

    孤荷凌寒自学python第六十五天学习mongoDB的基本操作并进行简单封装4 (完整学习过程屏幕记录视频地址在文末) 今天是学习mongoDB数据库的第十一天. 今天继续学习mongoDB的简单操作 ...

  4. 孤荷凌寒自学python第六十四天学习mongoDB的基本操作并进行简单封装3

    孤荷凌寒自学python第六十四天学习mongoDB的基本操作并进行简单封装3 (完整学习过程屏幕记录视频地址在文末) 今天是学习mongoDB数据库的第十天. 今天继续学习mongoDB的简单操作, ...

  5. 孤荷凌寒自学python第六十天在windows10上搭建本地Mongodb数据服务

     孤荷凌寒自学python第六十天在windows10上找搭建本地Mongodb数据服务 (完整学习过程屏幕记录视频地址在文末) 今天是学习mongoDB数据库的第六天.成功在本地搭建了windows ...

  6. 孤荷凌寒自学python第八十六天对selenium模块进行较详细的了解

    孤荷凌寒自学python第八十六天对selenium模块进行较详细的了解 (今天由于文中所阐述的原因没有进行屏幕录屏,见谅) 为了能够使用selenium模块进行真正的操作,今天主要大范围搜索资料进行 ...

  7. 孤荷凌寒自学python第七十六天开始写Python的第一个爬虫6

    孤荷凌寒自学python第七十六天开始写Python的第一个爬虫6 (完整学习过程屏幕记录视频地址在文末) 今天在上一天的基础上继续完成对我的第一个代码程序的书写. 不过由于对python-docx模 ...

  8. 孤荷凌寒自学python第七十天学习并实践beautifulsoup对象用法3

    孤荷凌寒自学python第七十天学习并实践beautifulsoup对象用法3 (完整学习过程屏幕记录视频地址在文末) 今天继续学习beautifulsoup对象的属性与方法等内容. 一.今天进一步了 ...

  9. 孤荷凌寒自学python第五十六天通过compass客户端和mongodb shell 命令来连接远端MongoDb数据库

    孤荷凌寒自学python第五十六天通过compass客户端和mongodb shell 命令来连接远端MongoDb数据库 (完整学习过程屏幕记录视频地址在文末) 今天是学习mongoDB数据库的第二 ...

随机推荐

  1. HDU(1754),线段树,单点替换,区间最值

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1754 线段树模板题,update功能是单点替换,query是访问区间最大值. #include < ...

  2. [pytorch] 官网教程+注释

    pytorch官网教程+注释 Classifier import torch import torchvision import torchvision.transforms as transform ...

  3. 【转】批处理命令 For循环命令详解!

    批处理for命令详解FOR这条命令基本上都被用来处理文本,但还有其他一些好用的功能!看看他的基本格式(这里我引用的是批处理中的格式,直接在命令行只需要一个%号)FOR 参数 %%变量名 IN (相关文 ...

  4. 利用API设置桌面背景

    实现效果: 知识运用: API函数SystemParametersInfo 实现代码: [DllImport("user32.dll", EntryPoint = "Sy ...

  5. AI-Info-Micron-Insight:5G、人工智能和即将到来的移动革命

    ylbtech-AI-Info-Micron-Insight:5G.人工智能和即将到来的移动革命 1.返回顶部 1. 5G.人工智能和即将到来的移动革命 人们都说自己的手机“智能”,但究竟有多智能?凡 ...

  6. 居中未知元素(翻译https://css-tricks.com/centering-in-the-unknown/)

    在web开发中,当你遇到居中元素时,知道越多关于元素本身和父级元素的信息,居中做起来就很轻松.但是,当遇到你一点都不知道的元素该怎么办? It's still kinda doable. 不会很难:已 ...

  7. caffe中的sgd,与激活函数(activation function)

    caffe中activation function的形式,直接决定了其训练速度以及SGD的求解. 在caffe中,不同的activation function对应的sgd的方式是不同的,因此,在配置文 ...

  8. jquery 标签中的属性操作

    .arrt() 获取匹配的元素集合中的第一个元素的属性值,或设置每一个元素中的一个或多个属性值. .attr(attributeName) $("em").attr("t ...

  9. java后台poi根据模板导出excel

    public class ExcelUtils { private static final String INSPECTIONRECORD_SURFACE_TEMPLET_PATH = " ...

  10. centos 7忘记了root密码,如何改密码?

    今天服务器突然进不去了,不知道是密码被改了,还是什么情况! 服务器版本:centos 7.0 网上查找了很多文档,有些办法不可行,如果是亲自试过绝对可行的方法: 1:重启服务器,如下界面,按键盘 &q ...