----------------------------------------------------------------------------------mongodb基本操作----------------------------------------------------------------------------------------
1:MongoDB是一款强大、灵活、且易于扩展的通用型数据库
2:强调:把数据库名添加到集合名前,得到集合的完全限定名,即命名空间
3:MongoDB是一个面向文档(document-oriented)的数据库,而不是关系型数据库。
4:易扩展
5:文档是MongoDB的核心概念。文档就是键值对的一个有序集{'msg':'hello','foo':3}。类似于python中的有序字典。
6:需要注意的是:
1、文档中的键/值对是有序的。
2、文档中的值不仅可以是在双引号里面的字符串,还可以是其他几种数据类型(甚至可以是整个嵌入的文档)。
3、MongoDB区分类型和大小写。
4、MongoDB的文档不能有重复的键。
5、文档中的值可以是多种不同的数据类型,也可以是一个完整的内嵌文档。文档的键是字符串。除了少数例外情况,键可以使用任意UTF-8字符。
7:文档键命名规范:
1、键不能含有\0 (空字符)。这个字符用来表示键的结尾。
2、.和$有特别的意义,只有在特定环境下才能使用。
3、以下划线"_"开头的键是保留的(不是严格要求的)。 查看帮助:------------------------------------------------------------:--help 下载:-----------------------------------------------------------https://www.mongodb.com/download-center#community
可视化工具---------------------------------------------------https://robomongo.org/ 安装:
1:配置环境变量-----------------------------------------------------------安装路径为D:\MongoDB,将D:\MongoDB\bin目录加入环境变量
2:新建目录文件-----------------------------------------------------------D:\MongoDB\data\db----和-----D:\MongoDB\log\mongod.log
3:新建配置文件----------------------------------------------------------参考:https://docs.mongodb.com/manual/reference/configuration-options/
systemLog:
destination: file
path: C:\MongoDB\log\mongod.log
logAppend: true
storage:
journal:
enabled: true
dbPath: C:\MongoDB\data\db
----------------------****------------------------------
systemLog:
destination: file
path: "D:\MongoDB\log\mongod.log"
logAppend: true
storage:
journal:
enabled: true
dbPath: "D:\MongoDB\data\db"
net:
bindIp: 0.0.0.0
port: 27017
setParameter:
enableLocalhostAuthBypass: false
4:制作系统服务----------------------------------------------------------mongod --config "D:\MongoDB\mongod.cfg" --bind_ip 0.0.0.0 --install
或者直接在命令行指定配置mongod --bind_ip 0.0.0.0 --port 27017 --logpath D:\MongoDB\log\mongod.log --logappend --dbpath D:\MongoDB\data\db
--serviceName "MongoDB" --serviceDisplayName "MongoDB" --install
5:创建连接--------------------------------------------------------------mongod.exc
6:启动-------------------------------------------------------------------net start MongoDB
7:关闭-------------------------------------------------------------------net stop MongoDB
8:登录-------------------------------------------------------------------mongo 基本数据类型:
1:null:用于表示空或不存在的字段
d={'x':null}
2:布尔型:true和false
d={'x':true,'y':false}
3:数值
d={'x':3,'y':3.1415926}
4:字符串
d={'x':'egon'}
5:日期
d={'x':new Date()}
d.x.getHours()
6:正则表达式
d={'pattern':/^egon.*?nb$/i}
正则写在//内,后面的i代表:
i 忽略大小写
m 多行匹配模式
x 忽略非转义的空白字符
s 单行匹配模式 7:数组
d={'x':[1,'a','v']} 8:内嵌文档
user={'name':'egon','addr':{'country':'China','city':'YT'}}
user.addr.country 9:对象id:是一个12字节的ID,是文档的唯一标识,不可变
d={'x':ObjectId()}
10:MongoDB中存储的文档必须有一个"_id"键。这个键的值可以是任意类型,默认是个ObjectId对象。
ObjectId是"_id"的默认类型。因为设计MongoDb的初衷就是用作分布式数据库,所以能够在分片环境中生成
唯一的标识符非常重要,而常规的做法:在多个服务器上同步自动增加主键既费时又费力,这就是MongoDB采用ObjectId的原因。
ObjectId采用12字节的存储空间,是一个由24个十六进制数字组成的字符串
0|1|2|3| 4|5|6| 7|8 9|10|11
时间戳 机器 PID 计数器 账号管理:
1:创建账号---------------------------------------------------------use admin
db.createUser(
{
user: "root",
pwd: "123",
roles: [ { role: "root", db: "admin" } ]
}
)
use test
db.createUser(
{
user: "egon",
pwd: "123",
roles: [ { role: "readWrite", db: "test" },
{ role: "read", db: "db1" } ]
}
)
2:退出-------------------------------------------------------------exit
3:关掉数据库-------------------------------------------------------net stop MongoDB
4:撤掉系统服务-----------------------------------------------------mongod --remove
6:重置系统服务-----------------------------------------------------mongod --bind_ip 0.0.0.0 --port 27017 --logpath D:\MongoDB\log\mongod.log --logappend --dbpath D:\MongoDB\data\db --serviceName "MongoDB" --serviceDisplayName "MongoDB" --install --auth
7:启动数据库-------------------------------------------------------net start MongoDB
8:登录-------------------------------------------------------------mongo
-----------------------------------------------------------use admin
db.auth("root","123")
-----------------------------------------------------------mongo --port 27017 -u "root" -p "123" --authenticationDatabase "admin" 数据库操作:
增-----------------------------------------------------------use config --------------------------如果数据库不存在,则创建数据库,否则切换到指定数据库。
查-----------------------------------------------------------show dbs-----------------------------查看所有(我们刚创建的数据库config并不在数据库的列表中, 要显示它,我们需要向config数据库插入一些数据)
删-----------------------------------------------------------user cinfing-------------------------先切换到要删的库下
-------------db.dropDatabase()----------------------删除当前库 集合操作(表操作):
增-----------------------------------------------db.user
-----db.user.info
-----db.user.auth
-----use database1--------有这个表切换,没有,创建。
查-----------------------------------------------show tables
删-----------------------------------------------db.tables.drop()
-----db.user.info.drop() 文档操作(数据(行)----字典形式):------------------------------------没有指定_id则默认ObjectId,_id不能重复,且插入后不可变。
增:---------------------------------------------------有相同的_id则覆盖,无相同的_id则新增,必须指定_id
1:单条插入--------------------------------------insert()
user0={
"name":"egon",
"age":10,
'hobbies':['music','read','dancing'],
'addr':{
'country':'China',
'city':'BJ'
}
2:多条插入--------------------------------------db.user.insertMany([user1,user2,user3,user4,user5])
user1={
"_id":1,
"name":"alex",
"age":10,
'hobbies':['music','read','dancing'],
'addr':{
'country':'China',
'city':'weifang'
}
} user2={
"_id":2,
"name":"wupeiqi",
"age":20,
'hobbies':['music','read','run'],
'addr':{
'country':'China',
'city':'hebei'
}
}
db.user.insertMany([user1,user2])
3:save-----------------------------------------save()
db.t1.save({"_id":1,"z":6})
db.t1.save({"_id":2,"z":6})
db.t1.save({"z":6})
查:---------------------------------------------------db.user.find()
比较运算----------------------------------------SQL:=,!=,>,<,>=,<=--------MongoDB:{key:value}代表什么等于什么,"$ne","$gt","$lt","gte","lte",其中"$ne"能用于所有数据类型
1:等于--------------------------------------
select * from db1.user where name = "alex";
db.user.find({'name':'alex'})
2:不等于------------------------------------"$ne"
select * from db1.user where name != "alex";
db.user.find({'name':{"$ne":'alex'}})
3:大于--------------------------------------"$gt"
select * from db1.user where id > 2;
db.user.find({'_id':{'$gt':2}})
4:小于--------------------------------------"$lt"
select * from db1.user where id > 2;
db.user.find({'_id':{'$gt':2}})
5:大于等于----------------------------------"$gte"
select * from db1.user where id >= 2;
db.user.find({"_id":{"$gte":2,}})
6:小于等于----------------------------------"lte"
select * from db1.user where id <= 2;
db.user.find({"_id":{"$lte":2}})
逻辑运算----------------------------------------SQL:and,or,not----------MongoDB:字典中逗号分隔的多个条件是and关系,"$or"的条件放到[]内,"$not"
1:与----------------------------------------,
select * from db1.user where id >= 2 and id < 4;
db.user.find({'_id':{"$gte":2,"$lt":4}})
select * from db1.user where id >= 2 and age < 40;
db.user.find({"_id":{"$gte":2},"age":{"$lt":40}})
2:或----------------------------------------[]
select * from db1.user where id >= 5 or name = "alex";
db.user.find({"$or":[{'_id':{"$gte":5}},{"name":"alex"}]})
4:求于--------------------------------------"$mod"
select * from db1.user where id % 2=1;
db.user.find({'_id':{"$mod":[2,1]}})
5:非----------------------------------------"$not"
select * from db1.user where not id % 2=1:
db.user.find({'_id':{"$not":{"$mod":[2,1]}}})
6:非---------------------------------------"$not"
db.user.find({'_id':{"$not":{"$mod":[2,1]}}})
7:既有--------又有------------------------"$all"
seelect * from db1.user where hobbies in dancing and tea:
db.user.find({'hobbies':{"$all":['dancing','tea']}})
8:第几-------------------------------------"$slice":1.......
db.user.find({},{'hobbies':{"$slice":-2},"age":0,"_id":0,"name":0,"addr":0})
成员运算----------------------------------------SQL:in,not in------------MongoDB:"$in","$nin"
1:是----------------------------------------"$in"
select * from db1.user where age in (20,30,31);
db.user.find({"age":{"$in":[20,30,31]}})
2:不是--------------------------------------"$nin"
select * from db1.user where name not in ('alex','yuanhao');
db.user.find({"name":{"$nin":['alex','yuanhao']}})
正则匹配----------------------------------------SQL: regexp 正则---------MongoDB: /正则表达/i,正则写在//内,后面的i代表:
i 忽略大小写
m 多行匹配模式
x 忽略非转义的空白字符
s 单行匹配模式
select * from db1.user where name regexp '^j.*?(g|n)$';
db.user.find({'name':/^j.*?(g|n)$/i})
取指定的字段------------------------------------db.user.find({'_id':3},{'_id':0,'name':1,'age':1})-------0(flase)取,1(True)不取
select name,age from db1.user where id=3;
db.user.find({'_id':3},{'_id':0,'name':1,'age':1})
查询数组----------------------------------------以字典的形式查询
1:查看有dancing爱好的人。------------------find
select * from where hobbies in dancing;
db.user.find({'hobbies':'dancing'})
2:查看既有dancing爱好又有tea爱好的人-------"$all"
db.user.find({'hobbies':{"$all":['dancing','tea']}})
3:查看第4个爱好为tea的人--------------------{"hobbies.4":4}
db.user.find({"hobbies.3":'tea'})
4:查看所有人最后两个爱好--------------------{"hobbies":{"$slice":-2}}
db.user.find({},{'hobbies':{"$slice":-2},"age":0,"_id":0,"name":0,"addr":0})
5:查看所有人的第2个到第3个爱好--------------{"hobbies":{"$slice":[1,2]}}
db.user.find({},{'hobbies':{"$slice":[1,2]},"age":0,"_id":0,"name":0,"addr":0})
格式化数据--------------------------------------.pretty------------------db.blog.find().pretty()
查询最后两个--------------------------------db.blog.find({},{'comments':{"$slice":-2}}).pretty()
查询1到2------------------------------------db.blog.find({},{'comments':{"$slice":[1,2]}}).pretty()
排序--------------------------------------------.sort----:1代表升序----:-1代表降序
查询所有,以name升序排列--------------------db.user.find().sort({"name":1,})
查询所有,以age和_id降序排列----------------db.user.find().sort({"age":-1,'_id':1})
分页--------------------------------------------limit代表取多少个document(行,),skip代表跳过前多少个document。
db.user.find().sort({'age':1}).limit(1).skip(2)
获取数量----------------------------------------.count()
db.user.count({'age':{"$gt":30}})
db.user.find({'age':{"$gt":30}}).count()
其他--------------------------------------------
1、{'key':null} 匹配key的值为null或者没有这个key
db.t2.insert({'a':10,'b':111})
db.t2.insert({'a':20})
db.t2.insert({'b':null})
2、查找所有
db.user.find() --------------------等同于db.user.find({})
db.user.find().pretty()
db.user.find({})
3、查找一个,与find用法一致,只是只取匹配成功的第一个
db.user.findOne({"_id":{"$gt":3}})
改:---------------------------------------------------updata()------用于更新已存在的文档。
1:覆盖式
语法:
db.table.update(条件,修改字段,其他参数)
db.user.update({"name":"wupeiqi"},{"age":23,"name":"武大郎"})
-------------------------------------------------------------------------------------------------------------------
upsert : -----------------------------------可选,默认为false,代表如果不存在update的记录不更新也不插入,设置为true代表,没有匹配新增一条数据。
multi : ------------------------------------可选,默认为false,代表只更新找到的第一条记录,设为true,代表更新找到的全部记录。
writeConcern :------------------------------可选,抛出异常的级别 2:局部修改-----------------------------------------设置set
1、update db1.user set name="WXX" where id = 2-------------------------------修改
db.user.update({'_id':2},{"$set":{"name":"WXX",}})
2、没有匹配成功则新增一条{"upsert":true}--------------------------------------没有匹配成功则新增一条
db.user.update({'_id':6},{"$set":{"name":"egon","age":18}},{"upsert":true})
3、默认只改匹配成功的第一条,{"multi":改多条}----------------------------------{"multi":true}默认flase,匹配成功的第一条,true,匹配成功的全部。
db.user.update({'_id':{"$gt":4}},{"$set":{"age":28}})
db.user.update({'_id':{"$gt":4}},{"$set":{"age":38}},{"multi":true})
4、修改内嵌文档,把名字为alex的人所在的地址国家改成Japan----------------------修改内嵌文档:内嵌文档.xx
db.user.update({'name':"alex"},{"$set":{"addr.country":"Japan"}})
5、把名字为alex的人的地2个爱好改成piao----------------------------------------修改内嵌文档:内嵌文档.索引
db.user.update({'name':"alex"},{"$set":{"hobbies.1":"piao"}})
6、删除alex的爱好,$unset------------------------------------------------------局部删除$unset
db.user.update({'name':"alex"},{"$unset":{"hobbies":""}}) 3:增加,减少----------------------------------------$inc
1、所有人年龄增加一岁
db.user.update({},{"$inc":{"age":1}},{"multi":true})
2、所有人年龄减少5岁db.user.update({},{"$inc":{"age":-5}},{"multi":true}) 4:添加删除数组内元素:$push,$pop,$pull
1:---------------------------------------------------------$push-------"$each":添加多个。
1、为名字为yuanhao的人添加一个爱好read
db.user.update({"name":"yuanhao"},{"$push":{"hobbies":"read"}})
2、为名字为yuanhao的人一次添加多个爱好tea,dancing
db.user.update({"name":"yuanhao"},{"$push":{"hobbies":{"$each":["tea","dancing"]}}})
2:--------------------------------------------------------$poll删除,从头部删除:{"$pop":{"key":1}}从尾部删除:{"$pop":{"key":-1}}
1:从数组末尾删除一个元素
db.user.update({"name":"yuanhao"},{"$pop":{"hobbies":1}})
2:从头部删除
db.user.update({"name":"yuanhao"},{"$pop":{"hobbies":-1}})
3:--------------------------------------------------------$pull,按照条件删除元素,:"$pull" 把符合条件的统统删掉,而$pop只能从两端删
db.user.update({'addr.country':"China"},{"$pull":{"hobbies":"read"}},{"multi":true}) 5:避免添加重复:-----------------------------------------------"$addToSet"
db.urls.update({"_id":8},{"$addToSet":{"urls":{"$each":['http://www.baidu.com','http://www.baidu.com','http://www.xxxx.com']}}}) 6:了解:限制大小"$slice",只留最后n个
db.user.update({"_id":5},{"$push":{"hobbies":{"$each":["read",'music','dancing'],"$slice":-2}}}) 7:了解:排序The $sort element value must be either 1 or -1"
db.user.update({"_id":5},{"$push":{"hobbies":{"$each":["read",'music','dancing'],"$slice":-1,"$sort":-1}}})
删:---------------------------------------------------delete
1:删除一个--------------------------------------delteeOne
db.user.deleteOne({"age":18})
2:删除国家为China的全部-------------------------deleteMany
db.user.deleteMany({"addr.country":"China"})
3:删除全部,清空数据----------------------------deleteMany({})
db.user.deleteMany({})
聚合:-------------------------------------------------aggregate()
筛选($match)、投射($project)、分组($group)、排序($sort)、限制($limit)、跳过($skip)
几个简单聚合命令:count、distinct和group。(详见MongoDB权威指南)
1:筛选----------------------------------------------($match{"$match":{"字段":"条件"}},可以使用任何常用查询操作符$gt,$l
1:select post from db1.emp where age > 20---------------------------------------------------------------------筛选
db.emp.aggregate({"$match":{"age":{"$gt":20}}})
2:select post from db1.emp where age > 20 group by post;------------------------------------------------------分组
db.emp.aggregate({"$match":{"age":{"$gt":20}}},{"$group":{"_id":"$post"}})
3:select post,avg(salary) as avg_salary from db1.emp where age > 20 group by post;----------------------------求平均数
db.emp.aggregate({"$match":{"age":{"$gt":20}}},{"$group":{"_id":"$post","avg_salary":{"$avg":"$salary"}}})
4:select post from db1.emp where age > 20 group by post having avg(salary) > 10000;---------------------------筛选,分组,平均数,筛选平均数大于10000的。
db.emp.aggregate({"$match":{"age":{"$gt":20}}},{"$group":{"_id":"$post","avg_salary":{"$avg":"$salary"}}},{"$match":{"avg_salary":{"$gt":10000}}})
2:投射----------------------------------------------"$project":{"要保留的字段名":1,"要去掉的字段名":0,"新增的字段名":"表达式"}}
1、select name,post,(age+1) as new_age from db1.emp;
db.emp.aggregate({"$project":{"name":1,"post":1,"new_age":{"$add":["$age",1]}}})
2、表达式之数学表达式
{"$add":[expr1,expr2,...,exprN]} #相加
{"$subtract":[expr1,expr2]} #第一个减第二个
{"$multiply":[expr1,expr2,...,exprN]} #相乘
{"$divide":[expr1,expr2]} #第一个表达式除以第二个表达式的商作为结果
{"$mod":[expr1,expr2]} #第一个表达式除以第二个表达式得到的余数作为结果
3、表达式之日期表达式:$year,$month,$week,$dayOfMonth,$dayOfWeek,$dayOfYear,$hour,$minute,$second
例如:select name,date_format("%Y") as hire_year from db1.emp
db.emp.aggregate({"$project":{"name":1,"hire_year":{"$year":"$hire_date"}}})
例如查看每个员工的工作多长时间
db.emp.aggregate({"$project":{"name":1,"hire_period":{"$subtract":[{"$year":new Date()},{"$year":"$hire_date"}]}}})
4、字符串表达式
{"$toUpper":expr}-----------------------------------------变大写
db.emp.aggregate( {"$project":{"NAME":{"$toUpper":"$name"}}})
{"$concat":["$name","_SB"]}-------------------------------追加指定的表达式或字符串连接在一起返回,只支持字符串拼接
db.emp.aggregate({"$match":{"name":{"$ne":"egon"}}},{"$project":{"_id":0,"new_name":{"$concat":["$name","_SB"]},}})
{"$substr":["$name",0,3]}---------------------------------切分字符串/$值为字符串的字段名,起始位置,截取几个字节
db.emp.aggregate({"$match":{"name":{"$ne":"egon"}}},{"$project":{"_id":0,"new_name":{"$substr":["$name",0,3]},}})
{"$toLower":expr} 5、逻辑表达式
$and
$or
$not
3:分组----------------------------------------------"$group":{"_id":分组字段,"新的字段名":聚合操作符}}
1、将分组字段传给$group函数的_id字段即可
{"$group":{"_id":"$sex"}} #按照性别分组
{"$group":{"_id":"$post"}} #按照职位分组
{"$group":{"_id":{"state":"$state","city":"$city"}}} #按照多个字段分组,比如按照州市分组 2、分组后聚合得结果,类似于sql中聚合函数的聚合操作符:$sum、$avg、$max、$min、$first、$last
1:select post,max(salary) from db1.emp group by post;
db.emp.aggregate({"$group":{"_id":"$post","max_salary":{"$max":"$salary"}}}) 2:去每个部门最大薪资与最低薪资
db.emp.aggregate({"$group":{"_id":"$post","max_salary":{"$max":"$salary"},"min_salary":{"$min":"$salary"}}}) 3:如果字段是排序后的,那么$first,$last会很有用,比用$max和$min效率高
db.emp.aggregate({"$group":{"_id":"$post","first_id":{"$first":"$_id"}}}) 4:求每个部门的总工资
db.emp.aggregate({"$group":{"_id":"$post","count":{"$sum":"$salary"}}}) 5:求每个部门的人数
db.emp.aggregate({"$group":{"_id":"$post","count":{"$sum":1}}}) 3、数组操作符
{"$addToSet":expr}:不重复
{"$push":expr}:重复
查询岗位名以及各岗位内的员工姓名:select post,group_concat(name) from db1.emp group by post;
db.emp.aggregate({"$group":{"_id":"$post","names":{"$push":"$name"}}})
db.emp.aggregate({"$group":{"_id":"$post","names":{"$addToSet":"$name"}}})
4:select post,max,min,sum,avg,count,group_concat from db1.emp group by post;
db.emp.aggregate(
{"$group":{
"_id":"$post",
"max_age":{"$max":"$age"},
"min_id":{"$min":"$_id"},
"avg_salary":{"$avg":"$salary"},
"sum_salary":{"$sum":"$salary"},
"count":{"$sum":1},
"names":{"$push":"$name"}
}
}
)
4:排序,限制:$limit、跳过:$skip-------------------{"$sort":1/-1}{"$limit":n} {"$skip":n} :{"$sort":{"字段名":1,"字段名":-1}}-1升序,-1降序
1、取平均工资最高的前两个部门
db.emp.aggregate({"$group":{"_id":"$post","平均工资":{"$avg":"$salary"}}},{"$sort":{"平均工资":-1}},{"$limit":2})
2、
db.emp.aggregate({"$group":{"_id":"$post","平均工资":{"$avg":"$salary"}}},{"$sort":{"平均工资":-1}},{"$limit":2},{"$skip":1)
3.
db.emp.aggregate(
{"$match":{"name":{"$ne":"egon"}}},
{"$project":{"_id":1,"new_name":{"$substr":["$name",0,3]},"age":1}},
{"$sort":{"age":1,"_id":-1}},
{"$skip":5},
{"$limit":5}
)
5:随机选取n个:-------------------------------------$sample
集合users包含的文档如下
{ "_id" : 1, "name" : "dave123", "q1" : true, "q2" : true }
{ "_id" : 2, "name" : "dave2", "q1" : false, "q2" : false }
{ "_id" : 3, "name" : "ahn", "q1" : true, "q2" : true }
{ "_id" : 4, "name" : "li", "q1" : true, "q2" : false }
{ "_id" : 5, "name" : "annT", "q1" : false, "q2" : true }
{ "_id" : 6, "name" : "li", "q1" : true, "q2" : true }
{ "_id" : 7, "name" : "ty", "q1" : false, "q2" : true } db.users.aggregate([ { $sample: { size: 3 } } ]) 练习题:
1. 查询岗位名以及各岗位内的员工姓名
db.emp.aggregate({"$group":{"_id":"$post","names":{"$push":"$name"}}}) 2. 查询岗位名以及各岗位内包含的员工个数
db.emp.aggregate({"$group":{"_id":"$post","count":{"$sum":1}}}) 3. 查询公司内男员工和女员工的个数
db.emp.aggregate({"$group":{"_id":"$sex","count":{"$sum":1}}}) 4. 查询岗位名以及各岗位的平均薪资、最高薪资、最低薪资
db.emp.aggregate({"$group":{"_id":"$post","avg_salary":{"$avg":"$salary"},"max_salary":{"$max":"$salary"},"min_salary":{"$min":"$salary"}}}) 5. 查询男员工与男员工的平均薪资,女员工与女员工的平均薪资
db.emp.aggregate({"$group":{"_id":"$sex","avg_salary":{"$avg":"$salary"}}}) 6. 查询各岗位内包含的员工个数小于2的岗位名、岗位内包含员工名字、个数
db.emp.aggregate(
{
"$group":{"_id":"$post","count":{"$sum":1},"names":{"$push":"$name"}}
},
{"$match":{"count":{"$lt":2}}},
{"$project":{"_id":0,"names":1,"count":1}}
) 7. 查询各岗位平均薪资大于10000的岗位名、平均工资
db.emp.aggregate(
{
"$group":{"_id":"$post","avg_salary":{"$avg":"$salary"}}
},
{"$match":{"avg_salary":{"$gt":10000}}},
{"$project":{"_id":1,"avg_salary":1}}
) 8. 查询各岗位平均薪资大于10000且小于20000的岗位名、平均工资
db.emp.aggregate(
{
"$group":{"_id":"$post","avg_salary":{"$avg":"$salary"}}
},
{"$match":{"avg_salary":{"$gt":10000,"$lt":20000}}},
{"$project":{"_id":1,"avg_salary":1}}
) 9. 查询所有员工信息,先按照age升序排序,如果age相同则按照hire_date降序排序
db.emp.aggregate(
{"$sort":{"age":1,"hire_date":-1}}
) 10. 查询各岗位平均薪资大于10000的岗位名、平均工资,结果按平均薪资升序排列
db.emp.aggregate(
{
"$group":{"_id":"$post","avg_salary":{"$avg":"$salary"}}
},
{"$match":{"avg_salary":{"$gt":10000}}},
{"$sort":{"avg_salary":1}}
) 11. 查询各岗位平均薪资大于10000的岗位名、平均工资,结果按平均薪资降序排列,取前1个
db.emp.aggregate(
{
"$group":{"_id":"$post","avg_salary":{"$avg":"$salary"}}
},
{"$match":{"avg_salary":{"$gt":10000}}},
{"$sort":{"avg_salary":-1}},
{"$limit":1},
{"$project":{"date":new Date,"平均工资":"$avg_salary","_id":0}}
) pymongo-------------------------------------------------------------http://api.mongodb.com/python/current/tutorial.html
from pymongo import MongoClient #1、链接
client=MongoClient('mongodb://root:123@localhost:27017/')
# client = MongoClient('localhost', 27017) #2、use 数据库
db=client['db2'] #等同于:client.db1 #3、查看库下所有的集合
print(db.collection_names(include_system_collections=False)) #4、创建集合
table_user=db['userinfo'] #等同于:db.user #5、插入文档
import datetime
user0={
"_id":1,
"name":"egon",
"birth":datetime.datetime.now(),
"age":10,
'hobbies':['music','read','dancing'],
'addr':{
'country':'China',
'city':'BJ'
}
} user1={
"_id":2,
"name":"alex",
"birth":datetime.datetime.now(),
"age":10,
'hobbies':['music','read','dancing'],
'addr':{
'country':'China',
'city':'weifang'
}
}
# res=table_user.insert_many([user0,user1]).inserted_ids
# print(res)
# print(table_user.count()) #6、查找 # from pprint import pprint#格式化细
# pprint(table_user.find_one())
# for item in table_user.find():
# pprint(item) # print(table_user.find_one({"_id":{"$gte":1},"name":'egon'})) #7、更新
table_user.update({'_id':1},{'name':'EGON'}) #8、传入新的文档替换旧的文档
table_user.save(
{
"_id":2,
"name":'egon_xxx'
}
)

  

Mongodb----整理的更多相关文章

  1. MongoDB整理笔记のMapReduce

    MongDB的MapReduce相当于MySQL中的“group by”,所以在MongoDB上使用Map/Reduce进行并行“统计”很容易. 使用MapReduce要实现两个函数Map函数和Red ...

  2. MongoDB整理笔记のjava MongoDB分页优化

    最近项目在做网站用户数据新访客统计,数据存储在MongoDB中,统计的数据其实也并不是很大,1000W上下,但是公司只配给我4G内存的电脑,让我程序跑起来气喘吁吁...很是疲惫不堪. 最常见的问题莫过 ...

  3. MongoDB整理笔记のID自增长

    以下是官网原文地址: http://docs.mongodb.org/manual/tutorial/create-an-auto-incrementing-field/ 概要 MongoDB 的_i ...

  4. MongoDB整理笔记のReplica Sets + Sharding

    MongoDB Auto-Sharding 解决了海量存储和动态扩容的问题,但离实际生产环境所需的高可靠.高可用还有些距离,所以有了"Replica Sets + Sharding" ...

  5. MongoDB整理笔记の新增Shard Server

    1.启动一个新Shard Server 进程 [root@localhost ~]# mkdir /data/shard/s2 [root@localhost ~]# /Apps/mongo/bin/ ...

  6. MongoDB整理笔记のSharding分片

    这是一种将海量的数据水平扩展的数据库集群系统,数据分表存储在sharding 的各个节点上,使用者通过简单的配置就可以很方便地构建一个分布式MongoDB 集群.MongoDB 的数据分块称为 chu ...

  7. MongoDB整理笔记の增加节点

    MongoDB Replica Sets 不仅提供高可用性的解决方案,它也同时提供负载均衡的解决方案,增减Replica Sets 节点在实际应用中非常普遍,例如当应用的读压力暴增时,3 台节点的环境 ...

  8. MongoDB整理笔记の管理Replica Sets

    一.读写分离 从库能进行查询,这样可以分担主库的大量的查询请求.   1.先向主库中插入一条测试数据 [root@localhost bin]# ./mongo --port 28010 MongoD ...

  9. MongoDB整理笔记のReplica oplog

    主从操作日志oplog MongoDB的Replica Set架构是通过一个日志来存储写操作的,这个日志就叫做"oplog".oplog.rs是一个固定长度的capped coll ...

  10. MongoDB整理笔记のReplica Sets

    MongoDB支持在多个机器中通过异步复制达到故障转移和实现冗余.多机器中同一时刻只有一台机器是用于写操作,正因为如此,MongoDB提供了数据一致性的保障.而担当primary角色的机器,可以把读的 ...

随机推荐

  1. SublimeText SFTP连接Amazon EC2

    文章最初发表于szhshp的第三边境研究所 转载请注明 1. SublimeText SFTP连接Amazon EC2 Sublime Text 3 正式版发布了,全平台IDE果断都换了. 今天终于有 ...

  2. Android Gesture Detector

    Android Touch Screen 与传统Click Touch Screen不同,会有一些手势(Gesture),例如Fling,Scroll等等.这些Gesture会使用户体验大大提升.An ...

  3. 基于Centos搭建Laravel 环境搭建

    系统要求:CentOS 7.2 64 位操作系统 安装 Laravel Laravel 简介 Laravel 是一套简洁.优雅的 PHP Web 开发框架.它可以让你从面条一样杂乱的代码中解脱出来:它 ...

  4. Apache Spark 2.2.0 正式发布

    本章内容: 待整理 参考文献: Apache Spark 2.2.0正式发布 Spark Release 2.2.0

  5. layui table 根据条件改变更换表格颜色 高亮显示 数据筛选

    请问想让当layui表格的某个字段符合某个条件的时候,让该行变颜色.这样可以实现么. layui数据表格怎么更换表格颜色 layui表格 通过判断某一行中的某一列的值进行设置这一行的颜色 LayUI之 ...

  6. 第一部分:开发前的准备-第三章 Application 基本原理

    第3章 应用程序基本原理 首先我们需要强调一下Android 应用程序是用java写的.Android SDK工具编译代码并把资源文件和数据打包成一个文件.这个名字的扩展名是.APK.要在androi ...

  7. python工具 - 批量文件重命名

    日常工作中经常会遇到这样的情况,需要将某个文件夹下的文件按着一定的规则进行重命名,当文件数量及其庞大的时候手工一个一个的去修需要耗费大量的时间,以下python工具可以协助批量修改文件名. 场景:某文 ...

  8. LeetCode: Best Time to Buy and Sell Stock III 解题报告

    Best Time to Buy and Sell Stock IIIQuestion SolutionSay you have an array for which the ith element ...

  9. Android开发(十三)——全屏滚动与listview

    Android全屏滚动使用scrollview,其中有需要采用listview进输出的内容,scrollview与listview冲突. 开始的思维是使用一个Scrollview加上一个ListVie ...

  10. qt在GUI显示时,将调试信息输出到控制台的设置

    1. 在.pro文件中添加一下设置: CONFIG += console 2. 项目的[构建和运行]中,需要勾选[Run in terminal]: