- 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([{djgkyy_sys", num_w : {$sum : 1}}}])
分组并排序,按工况类别分组统计,并降序。
db.getCollection('DJXX_YCDT1').aggregate([{djgkyy_sys", "num_w" : {sort:{"num_w":-1}}])
1
2
3
1.3.3 去重
collection.distinct(‘jh’)
1.3.4. 组合(and)查询
db.getCollection('DJXX_YCDT1').find({'djgkyy_sys':{gt:'201501'}}).count()
1
1.3.5. 通过match过滤后分组
db.getCollection('DJXX_YCDT1').aggregate([{gt:'201501'}}},{djgkyy_sys", "num_w" : {sort:{"num_w":-1}}])
1
1.3.6. not in
db.getCollection('DJXX_YCDT1').find({'djgkyy_sys':{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
- 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
网友评论