美文网首页大数据 爬虫Python AI SqlPython小哥哥
Python中MongoDB编程与管理实践经验四则!

Python中MongoDB编程与管理实践经验四则!

作者: 14e61d025165 | 来源:发表于2019-06-10 15:11 被阅读0次
    1. Mongo DB数据管理与使用

    1.1. 用户管理

    [root@bogon Python-3.6.8]# mongo

    MongoDB shell version v4.0.4

    connecting to: mongodb://127.0.0.1:27017

    Implicit session: session { "id" : UUID("92a9d807-afc2-49e3-8778-6cf3258ddf2d") }

    MongoDB server version: 4.0.4

    use admin

    switched to db admin

    db.auth("xiaoyw","123456")

    use admin

    switched to db admin

    db.auth("dba","123456")

    1

    show users

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    创建dba用户

    db.createUser({user:"dba",pwd:"123456",roles:[{role:"dbOwner",db:"admin"},{role:"dbOwner",db:"dev"},{role:"readWrite",db:"dev"}]});

    1

    1.2. 创建索引

    虽然Mongo查询效率很高,如果使用索引,通常能够极大的提高查询的效率。创建索引及查询索引命令如下:

    db.DJXX_YCDT1.createIndex({'jh':1},{'name':'idx_jh'})

    {

    "createdCollectionAutomatically" : false,
    
    "numIndexesBefore" : 1,
    
    "numIndexesAfter" : 2,
    
    "ok" : 1
    

    }

    db.DJXX_YCDT1.getIndexes()db.DJXX_YCDT1.getIndexes()

    [

    {
    
        "v" : 2,
    
        "key" : {
    
            "_id" : 1
    
        },
    
        "name" : "_id_",
    
        "ns" : "dev.DJXX_YCDT1"
    
    },
    
    {
    
        "v" : 2,
    
        "key" : {
    
            "jh" : 1
    
        },
    
        "name" : "idx_jh",
    
        "ns" : "dev.DJXX_YCDT1"
    
    },
    

    ]

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    1.3. 查询与统计

    1.3.1. 查询同一个文档中,字段相等的记录。

    db.getCollection('DJXX_YCDT1').find({'$where':'this.zxzh==this.zdzh'})

    1

    查询只返回功图数据,可以在find里加查询条件

    db.getCollection('DJXX_YCDT1').find({},{"sgtsj":1,"_id":0})

    1

    1.3.2. 分组统计

    db.getCollection('DJXX_YCDT1').aggregate([{group : {_id : "djgkyy_sys", num_w : {$sum : 1}}}])

    分组并排序,按工况类别分组统计,并降序。

    db.getCollection('DJXX_YCDT1').aggregate([{group : {"_id" : "djgkyy_sys", "num_w" : {sum : 1}}},{sort:{"num_w":-1}}])

    1

    2

    3

    1.3.3 去重

    collection.distinct(‘jh’)

    1.3.4. 组合(and)查询

    db.getCollection('DJXX_YCDT1').find({'djgkyy_sys':{ne:null},'cjsj_ny':{gt:'201501'}}).count()

    1

    1.3.5. 通过match过滤后分组

    db.getCollection('DJXX_YCDT1').aggregate([{match:{'cjsj_ny':{gt:'201501'}}},{group : {"_id" : "djgkyy_sys", "num_w" : {sum : 1}}},{sort:{"num_w":-1}}])

    1

    1.3.6. not in

    db.getCollection('DJXX_YCDT1').find({'djgkyy_sys':{nin:[null,'正常','供液不足']},'cjsj_ny':{gt:'201201'}}).count()

    1

    1.4. 查询导出数据

    mongo mongodb://192.168.1.200:27017/dev --username dba --password 123456 nquery201905.js >nresult201905.csv --authenticationDatabase admin

    1

    如果遇到编码问题,用其他的编辑器,例如文本文档,打开CSV文件,另存为一下,记得把编码改成 utf-8 就好了

    导入数据

    [root@bogon python]# mongoimport --username dba --password 123456 --db dev --collection DJXX_YCDT1 --file /home/python/下载/result20190426.json --authenticationDatabase admin

    1

    1. python与Mongo开发

    2.1. 查询编程

    Mongo客户端查询语句,如何转换为Python,例如:

    db.getCollection('DJXX_YCDT1').find({'jh':'712','cjsj':{'$gt':'2017-12-06'}}).sort({'cjsj':-1}).limit(3)

    1

    由于find中大括号{}里面的内容,属于字典(Dict)类型,需要通过构造字典方式处理,直接使用字符串不好使。参考代码如下:

    def get_pre_data(collection,jh,cjsj,num=3):

    queryobject = {'jh':'','cjsj':{'$lt':''}}

    queryobject['jh'] =jh

    subobj = {'$lt':''}

    subobj['$lt'] = cjsj

    queryobject['cjsj'] = subobj

    ret = collection.find(queryobject).sort('cjsj',-1).limit(num)

    Python学习交流群:1004391443,这里是python学习者聚集地,有大牛答疑,有资源共享!小编也准备了一份python学习资料,有想学习python编程的,或是转行,或是大学生,还有工作中想提升自己能力的,正在学习的小伙伴欢迎加入学习。

    开始,先定义包括全内容的字典,也可以后续增加关键字。代码中,条件查询可以看作字典中字典嵌套。

    2.2. 关于排序

    python里的是函数sort(),括号里面不能用字典,使用方式如上所示降序用法,也可以直接sort(‘cjsj’)。

    2.3. 查询返回结果是字典集

    如上代码所示,查询返回结果是字典集,也就是list里面嵌套字典。

    def get_data(ret,lable):

    ListX = []

    ListY = []

    for rowdat in ret:

    tmp_lst = []
    
    jh = rowdat['jh']
    
    tmp_lst.append(jh) #0
    
    tmp_lst.append(rowdat['bj']) #1
    
    tmp_lst.append(rowdat['zdzh']) #2
    
    tmp_lst.append(rowdat['zxzh']) #3
    
    tmp_lst.append(rowdat['yy']) #4
    

    相关文章

      网友评论

        本文标题:Python中MongoDB编程与管理实践经验四则!

        本文链接:https://www.haomeiwen.com/subject/evuzxctx.html