美文网首页大数据 爬虫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