孤荷凌寒自学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. Poj(2225),三维BFS

    题目链接:http://poj.org/problem?id=2225 这里要注意的是,输入的是坐标x,y,z,那么这个点就是在y行,x列,z层上. 我竟然WA在了结束搜索上了,写成了输出s.step ...

  2. 成绩累加排名,poj(2153)

    题目链接:http://poj.org/problem?id=2153 解题报告: 注意map中的string,因此要将char[]转换为string型. #include <iostream& ...

  3. vue中多个元素或多个组件之间的动画效果

    多个元素的过渡 <style> .v-enter,.v-leave-to{ opacity: 0; } .v-enter-acitve,.v-leave-active{ opacity: ...

  4. node执行环境

    nodejs本质上是一个javascript的执行环境,只是由于他的封装,加上更多web底层的一个处理,赋予了更多的能力,那么执行环境到底是什么呢,我们到浏览器里面体验看看,在chrome里面控制台, ...

  5. 最终类object 和内部类

    Object 类 性质:[1]是所有类的根类.             [2]如果一个类没有显示继承另外一个类,那么该类一定继承于Object toString() 返回对象的字符串表示形式 特殊:[ ...

  6. node.js 练习2 (调用函数)

    1. 调用本地 函数 (1)  创建 n2-1.js ,并输入代码 (2) 运行localhhost:8000 (3)在浏览器中 查看 (4)在cmd中查看 2.调用外部 函数 (1) 创建n2-2. ...

  7. 几位it 前辈的博客

    赵劼 http://blog.zhaojie.me/?page=2 陈硕 http://www.cnblogs.com/Solstice/ 轮子哥 http://www.cnblogs.com/gen ...

  8. MAC os x 系统java开发环境搭建教程

    https://jingyan.baidu.com/article/3d69c55147a3baf0cf02d7ca.html

  9. IE问题——列表项图像

    等我们实现列表时,经常会遇到一种情况:需要为列表的每一项的前面添加一个列表项图像. 我们在查阅W3C时会发现,在CSS中已经为我们提供了实现方法——“list-style-type”,我们来看看它的实 ...

  10. 第36章 SDIO—SD卡读写测试—零死角玩转STM32-F429系列

    第36章     SDIO—SD卡读写测试 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/f ...