<div class="blogpost-body">
<div class="blogpost-body">
<div style="text-align: right;">
<div class="blogpost-body">
<div class="blogpost-body">
<div style="text-align: right;">
MongoDB是一款强大、灵活、且易于扩展的通用型数据库
1、易用性
2、易扩展性
3、丰富的功能
<span style="color: #008000;">#<span style="color: #008000;">3、特殊的集合类型
<span style="color: #000000;">支持存在时间有限的集合,适用于那些将在某个时刻过期的数据,如会话session。类似地,MongoDB也支持固定大小的集合,用于保存近期数据,如日志
<span style="color: #008000;">#<span style="color: #008000;">4、文件存储
<span style="color: #000000;">支持一种非常易用的协议,用于存储大文件和文件元数据。MongoDB并不具备一些在关系型数据库中很普遍的功能,如链接join和复杂的多行事务。省略
这些的功能是处于架构上的考虑,或者说为了得到更好的扩展性,因为在分布式系统中这两个功能难以高效地实现
4、卓越的性能
1、文档是MongoDB的核心概念。文档就是键值对的一个有序集{'msg':'hello','foo':3}。类似于python中的有序字典。
2、集合就是一组文档。如果将MongoDB中的一个文档比喻为关系型数据的一行,那么一个集合就是相当于一张表
<span style="color: #008000;">#
<span style="color: #008000;">2、组织子集合的方式就是使用“.”,分隔不同命名空间的子集合。<span style="color: #008000;">#<span style="color: #008000;">3、当第一个文档插入时,集合就会被创建。合法的集合名:
集合名不能是空字符串<span style="color: #800000;">""<span style="color: #000000;">。
集合名不能含有\0字符(空字符),这个字符表示集合名的结尾。
集合名不能以<span style="color: #800000;">"<span style="color: #800000;">system.<span style="color: #800000;">"<span style="color: #000000;">开头,这是为系统集合保留的前缀。
用户创建的集合名字不能含有保留字符。有些驱动程序的确支持在集合名里面包含,这是因为某些系统生成的集合中包含该字符。除非你要访问这种系统创建的集合,否则千万不要在名字里出现$。
3、数据库:在MongoDB中,多个文档组成集合,多个集合可以组成数据库
<span style="color: #008000;">#
<span style="color: #008000;">2、新建目录与文件<span style="color: #008000;">#<span style="color: #008000;">3、新建配置文件mongod.cfg,参考:https://docs.mongodb.com/manual/reference/configuration-options/
<span style="color: #000000;">systemLog:
destination: file
path: <span style="color: #800000;">D:\MongoDB\log\mongod.log<span style="color: #000000;">
logAppend: true
storage:
journal:
enabled: true
dbPath: <span style="color: #800000;">D:\MongoDB\data\db<span style="color: #000000;">
net:
bindIp: 0.0.0.0<span style="color: #000000;">
port: 27017<span style="color: #000000;">
setParameter:
enableLocalhostAuthBypass: false
<span style="color: #008000;">#<span style="color: #008000;">4、制作系统服务
mongod --config <span style="color: #800000;">"<span style="color: #800000;">D:\MongoDB\mongod.cfg<span style="color: #800000;">" --bind_ip 0.0.0.0 --install <span style="color: #008000;">#<span style="color: #008000;"> 按照指定的配置文件进行配置
<span style="color: #000000;">或者直接在命令行指定配置
mongod --bind_ip 0.0.0.0 --port 27017 --logpath D:\MongoDB\log\mongod.log --logappend --dbpath D:\MongoDB\data\db --serviceName <span style="color: #800000;">"<span style="color: #800000;">MongoDB<span style="color: #800000;">" --servicedisplayName <span style="color: #800000;">"<span style="color: #800000;">MongoDB<span style="color: #800000;">" --install <span style="color: #008000;">#<span style="color: #008000;">执行完会在D:\MongoDB\log下生成mongod.log文件
<span style="color: #008000;">#<span style="color: #008000;">5、启动\关闭
<span style="color: #000000;">net start MongoDB
net stop MongoDB
<span style="color: #008000;">#<span style="color: #008000;">6、登录
<span style="color: #000000;">mongo
链接:http://www.runoob.com/mongodb/mongodb-window-install.html
创建用户,要先进入到某个数据库中才能进行创建,管理员账号要在admin数据库中创建
<span style="color: #008000;">#<span style="color: #008000;">3、登录:注意使用双引号而非单引号
mongo --port 27017 -u <span style="color: #800000;">"<span style="color: #800000;">root<span style="color: #800000;">" -p <span style="color: #800000;">"<span style="color: #800000;">123<span style="color: #800000;">" --authenticationDatabase <span style="color: #800000;">"<span style="color: #800000;">admin<span style="color: #800000;">"<span style="color: #000000;">
也可以在登录之后用db.auth(<span style="color: #800000;">"<span style="color: #800000;">账号<span style="color: #800000;">",<span style="color: #800000;">"<span style="color: #800000;">密码<span style="color: #800000;">"<span style="color: #000000;">)登录
mongo
use admin
db.auth(<span style="color: #800000;">"<span style="color: #800000;">root<span style="color: #800000;">",<span style="color: #800000;">"<span style="color: #800000;">123<span style="color: #800000;">"<span style="color: #000000;">)
<span style="color: #008000;">#<span style="color: #008000;">推荐博客:https://www.cnblogs.com/zhoujinyi/p/4610050.html
https://www.jianshu.com/p/a4e94bb8a052
<span style="color: #008000;">#
<span style="color: #008000;">2、mongo --nodb #不连接到任何数据库<span style="color: #008000;">#<span style="color: #008000;">3、启动之后,在需要时运行new Mongo(hostname)命令就可以连接到想要的mongod了:
conn=new Mongo(<span style="color: #800000;">'<span style="color: #800000;">127.0.0.1:27017<span style="color: #800000;">'<span style="color: #000000;">)
connection to 127.0.0.1:27017
db=conn.getDB(<span style="color: #800000;">'<span style="color: #800000;">admin<span style="color: #800000;">'<span style="color: #000000;">)
admin
<span style="color: #008000;">#<span style="color: #008000;">4、help查看帮助
<span style="color: #008000;">#<span style="color: #008000;">5、mongo时一个简化的JavaScript shell,是可以执行JavaScript脚本的
1、在概念上,MongoDB的文档与Javascript的对象相近,因而可以认为它类似于JSON。JSON(http://www.json.org)是一种简单的数据表示方式:其规范仅用一段文字就能描述清楚(其官网证明了这点),且仅包含六种数据类型。
2、这样有很多好处:易于理解、易于解析、易于记忆。然而从另一方面说,因为只有null、布尔、数字、字符串、数字和对象这几种数据类型,所以JSON的表达能力有一定的局限。
3、虽然JSON具备的这些类型已经具有很强的表现力,但绝大数应用(尤其是在于数据库打交道时)都还需要其他一些重要的类型。例如,JSON没有日期类型,这使得原本容易日期处理变得烦人。另外,JSON只有一种数字类型,无法区分浮点数和整数,更别区分32位和64位了。再者JSON无法表示其他一些通用类型,如正则表达式或函数。
4、MongoDB在保留了JSON基本键/值对特性的基础上,添加了其他一些数据类型。在不同的编程语言下,这些类型的确切表示有些许差异。下面说明了MongoDB支持的其他通用类型,以及如何正在文档中使用它们
5、_id和ObjectId
时间戳单位为秒,与随后5个字节组合起来,提供了秒级的唯一性。这个4个字节隐藏了文档的创建时间,绝大多数驱动程序都会提供
一个方法,用于从ObjectId中获取这些信息。
因为使用的是当前时间,很多用户担心要对服务器进行时钟同步。其实没必要,因为时间戳的实际值并不重要,只要它总是不停增加就好。
接下来3个字节是所在主机的唯一标识符。通常是机器主机名的散列值。这样就可以保证不同主机生成不同的ObjectId,不产生冲突
接下来连个字节确保了在同一台机器上并发的多个进程产生的ObjectId是唯一的
前9个字节确保了同一秒钟不同机器不同进程产生的ObjectId是唯一的。最后3个字节是一个自动增加的 计数器。确保相同进程的同一秒产生的
ObjectId也是不一样的。
<span style="color: #008000;">#
<span style="color: #008000;">2、查<span style="color: #008000;">#<span style="color: #008000;">3、删
use config <span style="color: #008000;">#<span style="color: #008000;">先切换到要删的库下
db.dropDatabase() <span style="color: #008000;">#<span style="color: #008000;">删除当前库
<span style="color: #000000;"> show tables <span style="color: #008000;"> #查看当前数据库中所有的集合
><span style="color: #000000;"> show tables<span style="color: #000000;"> db.table1.drop()
true
增
<span style="color: #008000;">#
<span style="color: #008000;">2、插入单条db.test.insert(user0)
db.test.find()
<span style="color: #008000;">#<span style="color: #008000;">3、插入多条
user1=<span style="color: #000000;">{
<span style="color: #800000;">"<span style="color: #800000;">_id<span style="color: #800000;">":1<span style="color: #000000;">,<span style="color: #800000;">"<span style="color: #800000;">name<span style="color: #800000;">":<span style="color: #800000;">"<span style="color: #800000;">alex<span style="color: #800000;">"<span style="color: #000000;">,<span style="color: #800000;">'<span style="color: #800000;">city<span style="color: #800000;">':<span style="color: #800000;">'<span style="color: #800000;">weifang<span style="color: #800000;">'<span style="color: #000000;">
}
}
user2=<span style="color: #000000;">{
<span style="color: #800000;">"<span style="color: #800000;">_id<span style="color: #800000;">":2<span style="color: #000000;">,<span style="color: #800000;">"<span style="color: #800000;">name<span style="color: #800000;">":<span style="color: #800000;">"<span style="color: #800000;">wupeiqi<span style="color: #800000;">"<span style="color: #000000;">,<span style="color: #800000;">"<span style="color: #800000;">age<span style="color: #800000;">":20<span style="color: #000000;">,<span style="color: #800000;">'<span style="color: #800000;">run<span style="color: #800000;">'<span style="color: #000000;">],<span style="color: #800000;">'<span style="color: #800000;">city<span style="color: #800000;">':<span style="color: #800000;">'<span style="color: #800000;">hebei<span style="color: #800000;">'<span style="color: #000000;">
}
}
user3=<span style="color: #000000;">{
<span style="color: #800000;">"<span style="color: #800000;">_id<span style="color: #800000;">":3<span style="color: #000000;">,<span style="color: #800000;">"<span style="color: #800000;">name<span style="color: #800000;">":<span style="color: #800000;">"<span style="color: #800000;">yuanhao<span style="color: #800000;">"<span style="color: #000000;">,<span style="color: #800000;">"<span style="color: #800000;">age<span style="color: #800000;">":30<span style="color: #000000;">,<span style="color: #800000;">'<span style="color: #800000;">drink<span style="color: #800000;">'<span style="color: #000000;">],<span style="color: #800000;">'<span style="color: #800000;">city<span style="color: #800000;">':<span style="color: #800000;">'<span style="color: #800000;">heibei<span style="color: #800000;">'<span style="color: #000000;">
}
}
user4=<span style="color: #000000;">{
<span style="color: #800000;">"<span style="color: #800000;">_id<span style="color: #800000;">":4<span style="color: #000000;">,<span style="color: #800000;">"<span style="color: #800000;">name<span style="color: #800000;">":<span style="color: #800000;">"<span style="color: #800000;">jingliyang<span style="color: #800000;">"<span style="color: #000000;">,<span style="color: #800000;">"<span style="color: #800000;">age<span style="color: #800000;">":40<span style="color: #000000;">,<span style="color: #800000;">'<span style="color: #800000;">dancing<span style="color: #800000;">',<span style="color: #800000;">'<span style="color: #800000;">tea<span style="color: #800000;">'<span style="color: #000000;">],<span style="color: #800000;">'<span style="color: #800000;">city<span style="color: #800000;">':<span style="color: #800000;">'<span style="color: #800000;">BJ<span style="color: #800000;">'<span style="color: #000000;">
}
}
user5=<span style="color: #000000;">{
<span style="color: #800000;">"<span style="color: #800000;">_id<span style="color: #800000;">":5<span style="color: #000000;">,<span style="color: #800000;">"<span style="color: #800000;">name<span style="color: #800000;">":<span style="color: #800000;">"<span style="color: #800000;">jinxin<span style="color: #800000;">"<span style="color: #000000;">,<span style="color: #800000;">"<span style="color: #800000;">age<span style="color: #800000;">":50<span style="color: #000000;">,<span style="color: #800000;">'<span style="color: #800000;">read<span style="color: #800000;">'<span style="color: #000000;">,],<span style="color: #800000;">'<span style="color: #800000;">city<span style="color: #800000;">':<span style="color: #800000;">'<span style="color: #800000;">henan<span style="color: #800000;">'<span style="color: #000000;">
}
}
db.user.insertMany([user1,user2,user3,user4,user5])
查 (查询时在最后加上.pretty()可以对查询结果进行美化)
<span style="color: #008000;">#
<span style="color: #008000;">1、select * from db1.user where name = "alex";<span style="color: #008000;">#<span style="color: #008000;">2、select * from db1.user where name != "alex";
db.user.find({<span style="color: #800000;">'<span style="color: #800000;">name<span style="color: #800000;">':{<span style="color: #800000;">"<span style="color: #800000;">$ne<span style="color: #800000;">":<span style="color: #800000;">'<span style="color: #800000;">alex<span style="color: #800000;">'<span style="color: #000000;">}})
<span style="color: #008000;">#<span style="color: #008000;">3、select * from db1.user where id > 2;
db.user.find({<span style="color: #800000;">'<span style="color: #800000;">_id<span style="color: #800000;">':{<span style="color: #800000;">'<span style="color: #800000;">$gt<span style="color: #800000;">':2<span style="color: #000000;">}})
<span style="color: #008000;">#<span style="color: #008000;">4、select * from db1.user where id < 3;
db.user.find({<span style="color: #800000;">'<span style="color: #800000;">_id<span style="color: #800000;">':{<span style="color: #800000;">'<span style="color: #800000;">$lt<span style="color: #800000;">':3<span style="color: #000000;">}})
<span style="color: #008000;">#<span style="color: #008000;">5、select * from db1.user where id >= 2;
db.user.find({<span style="color: #800000;">"<span style="color: #800000;">_id<span style="color: #800000;">":{<span style="color: #800000;">"<span style="color: #800000;">$gte<span style="color: #800000;">":2<span style="color: #000000;">,}})
<span style="color: #008000;">#<span style="color: #008000;">6、select * from db1.user where id <= 2;
db.user.find({<span style="color: #800000;">"<span style="color: #800000;">_id<span style="color: #800000;">":{<span style="color: #800000;">"<span style="color: #800000;">$lte<span style="color: #800000;">":2}})
<span style="color: #008000;">#
<span style="color: #008000;">1、select * from db1.user where id >= 2 and id < 4;<span style="color: #008000;">#<span style="color: #008000;">2、select * from db1.user where id >= 2 and age < 40;
db.user.find({<span style="color: #800000;">"<span style="color: #800000;">_id<span style="color: #800000;">":{<span style="color: #800000;">"<span style="color: #800000;">$gte<span style="color: #800000;">":2},<span style="color: #800000;">"<span style="color: #800000;">age<span style="color: #800000;">":{<span style="color: #800000;">"<span style="color: #800000;">$lt<span style="color: #800000;">":40<span style="color: #000000;">}})
<span style="color: #008000;">#<span style="color: #008000;">3、select * from db1.user where id >= 5 or name = "alex";
<span style="color: #000000;">db.user.find({
<span style="color: #800000;">"<span style="color: #800000;">$or<span style="color: #800000;">"<span style="color: #000000;">:[
{<span style="color: #800000;">'<span style="color: #800000;">_id<span style="color: #800000;">':{<span style="color: #800000;">"<span style="color: #800000;">$gte<span style="color: #800000;">":5<span style="color: #000000;">}},{<span style="color: #800000;">"<span style="color: #800000;">name<span style="color: #800000;">":<span style="color: #800000;">"<span style="color: #800000;">alex<span style="color: #800000;">"<span style="color: #000000;">}
]
})
<span style="color: #008000;">#<span style="color: #008000;">4、select * from db1.user where id % 2=1;
db.user.find({<span style="color: #800000;">'<span style="color: #800000;">_id<span style="color: #800000;">':{<span style="color: #800000;">"<span style="color: #800000;">$mod<span style="color: #800000;">":[2,1<span style="color: #000000;">]}})
<span style="color: #008000;">#<span style="color: #008000;">5、上题,取反
db.user.find({<span style="color: #800000;">'<span style="color: #800000;">_id<span style="color: #800000;">':{<span style="color: #800000;">"<span style="color: #800000;">$not<span style="color: #800000;">":{<span style="color: #800000;">"<span style="color: #800000;">$mod<span style="color: #800000;">":[2,1]}}})
<span style="color: #008000;">#
<span style="color: #008000;">1、select * from db1.user where age in (20,30,31);<span style="color: #008000;">#<span style="color: #008000;">2、select * from db1.user where name not in ('alex','yuanhao');
db.user.find({<span style="color: #800000;">"<span style="color: #800000;">name<span style="color: #800000;">":{<span style="color: #800000;">"<span style="color: #800000;">$nin<span style="color: #800000;">":[<span style="color: #800000;">'<span style="color: #800000;">alex<span style="color: #800000;">',<span style="color: #800000;">'<span style="color: #800000;">yuanhao<span style="color: #800000;">']}})
<span style="color: #008000;">#
<span style="color: #008000;">1、select from db1.user where name regexp '^j.?(g|n)$';<span style="color: #008000;">#<span style="color: #008000;">3、查看第4个爱好为tea的人
db.user.find({<span style="color: #800000;">"<span style="color: #800000;">hobbies.3<span style="color: #800000;">":<span style="color: #800000;">'<span style="color: #800000;">tea<span style="color: #800000;">'<span style="color: #000000;">})
<span style="color: #008000;">#<span style="color: #008000;">4、查看所有人最后两个爱好
db.user.find({},{<span style="color: #800000;">'<span style="color: #800000;">hobbies<span style="color: #800000;">':{<span style="color: #800000;">"<span style="color: #800000;">$slice<span style="color: #800000;">":-2},<span style="color: #800000;">"<span style="color: #800000;">age<span style="color: #800000;">":0,<span style="color: #800000;">"<span style="color: #800000;">_id<span style="color: #800000;">":0,<span style="color: #800000;">"<span style="color: #800000;">name<span style="color: #800000;">":0,<span style="color: #800000;">"<span style="color: #800000;">addr<span style="color: #800000;">"<span style="color: #000000;">:0})
<span style="color: #008000;">#<span style="color: #008000;">5、查看所有人的第2个到第3个爱好
db.user.find({},{<span style="color: #800000;">'<span style="color: #800000;">hobbies<span style="color: #800000;">':{<span style="color: #800000;">"<span style="color: #800000;">$slice<span style="color: #800000;">":[1,2]},<span style="color: #800000;">"<span style="color: #800000;">addr<span style="color: #800000;">"<span style="color: #000000;">:0})
><span style="color: #000000;"> db.blog.find().pretty()
{
<span style="color: #800000;">"<span style="color: #800000;">_id<span style="color: #800000;">" : 1<span style="color: #000000;">,<span style="color: #800000;">"<span style="color: #800000;">name<span style="color: #800000;">" : <span style="color: #800000;">"<span style="color: #800000;">alex意外死亡的真相<span style="color: #800000;">"<span style="color: #000000;">,<span style="color: #800000;">"<span style="color: #800000;">comments<span style="color: #800000;">"<span style="color: #000000;"> : [
{
<span style="color: #800000;">"<span style="color: #800000;">name<span style="color: #800000;">" : <span style="color: #800000;">"<span style="color: #800000;">egon<span style="color: #800000;">"<span style="color: #000000;">,<span style="color: #800000;">"<span style="color: #800000;">content<span style="color: #800000;">" : <span style="color: #800000;">"<span style="color: #800000;">alex是谁???<span style="color: #800000;">"<span style="color: #000000;">,<span style="color: #800000;">"<span style="color: #800000;">thumb<span style="color: #800000;">" : 200<span style="color: #000000;">
},{
<span style="color: #800000;">"<span style="color: #800000;">name<span style="color: #800000;">" : <span style="color: #800000;">"<span style="color: #800000;">wxx<span style="color: #800000;">"<span style="color: #000000;">,<span style="color: #800000;">"<span style="color: #800000;">content<span style="color: #800000;">" : <span style="color: #800000;">"<span style="color: #800000;">我去,真的假的<span style="color: #800000;">"<span style="color: #000000;">,<span style="color: #800000;">"<span style="color: #800000;">thumb<span style="color: #800000;">" : 300<span style="color: #000000;">
},{
<span style="color: #800000;">"<span style="color: #800000;">name<span style="color: #800000;">" : <span style="color: #800000;">"<span style="color: #800000;">yxx<span style="color: #800000;">"<span style="color: #000000;">,<span style="color: #800000;">"<span style="color: #800000;">content<span style="color: #800000;">" : <span style="color: #800000;">"<span style="color: #800000;">吃喝嫖赌抽,欠下两个亿<span style="color: #800000;">"<span style="color: #000000;">,<span style="color: #800000;">"<span style="color: #800000;">thumb<span style="color: #800000;">" : 40<span style="color: #000000;">
},{
<span style="color: #800000;">"<span style="color: #800000;">name<span style="color: #800000;">" : <span style="color: #800000;">"<span style="color: #800000;">egon<span style="color: #800000;">"<span style="color: #000000;">,<span style="color: #800000;">"<span style="color: #800000;">content<span style="color: #800000;">" : <span style="color: #800000;">"<span style="color: #800000;">xxx<span style="color: #800000;">"<span style="color: #000000;">,<span style="color: #800000;">"<span style="color: #800000;">thumb<span style="color: #800000;">"<span style="color: #000000;"> : 0
}
]
}
db.blog.find({},{<span style="color: #800000;">'<span style="color: #800000;">comments<span style="color: #800000;">':{<span style="color: #800000;">"<span style="color: #800000;">$slice<span style="color: #800000;">":-2}}).pretty() <span style="color: #008000;">#<span style="color: #008000;">查询最后两个
db.blog.find({},{<span style="color: #800000;">'<span style="color: #800000;">comments<span style="color: #800000;">':{<span style="color: #800000;">"<span style="color: #800000;">$slice<span style="color: #800000;">":[1,2]}}).pretty() <span style="color: #008000;">#<span style="color: #008000;">查询1到2
<span style="color: #008000;">#<span style="color: #008000;">2、查找所有
db.user.find() <span style="color: #008000;">#<span style="color: #008000;">等同于db.user.find({})
<span style="color: #000000;">db.user.find().pretty()
<span style="color: #008000;">#<span style="color: #008000;">3、查找一个,与find用法一致,只是只取匹配成功的第一个
db.user.findOne({<span style="color: #800000;">"<span style="color: #800000;">_id<span style="color: #800000;">":{<span style="color: #800000;">"<span style="color: #800000;">$gt<span style="color: #800000;">":3}})
改
obj.username
=obj.name+<span style="color: #800000;">'<span style="color: #800000;">SB<span style="color: #800000;">'<span style="color: #000000;">db.user.update({
<span style="color: #800000;">"<span style="color: #800000;">_id<span style="color: #800000;">":2},obj)<span style="color: #008000;">#<span style="color: #008000;">2、没有匹配成功则新增一条{"upsert":true}
db.user.update({<span style="color: #800000;">'<span style="color: #800000;">_id<span style="color: #800000;">':6},{<span style="color: #800000;">"<span style="color: #800000;">$set<span style="color: #800000;">":{<span style="color: #800000;">"<span style="color: #800000;">name<span style="color: #800000;">":<span style="color: #800000;">"<span style="color: #800000;">egon<span style="color: #800000;">",<span style="color: #800000;">"<span style="color: #800000;">age<span style="color: #800000;">":18}},{<span style="color: #800000;">"<span style="color: #800000;">upsert<span style="color: #800000;">"<span style="color: #000000;">:true})
<span style="color: #008000;">#<span style="color: #008000;">3、默认只改匹配成功的第一条,{"multi":改多条}
db.user.update({<span style="color: #800000;">'<span style="color: #800000;">_id<span style="color: #800000;">':{<span style="color: #800000;">"<span style="color: #800000;">$gt<span style="color: #800000;">":4}},{<span style="color: #800000;">"<span style="color: #800000;">$set<span style="color: #800000;">":{<span style="color: #800000;">"<span style="color: #800000;">age<span style="color: #800000;">":28<span style="color: #000000;">}})
db.user.update({<span style="color: #800000;">'<span style="color: #800000;">_id<span style="color: #800000;">':{<span style="color: #800000;">"<span style="color: #800000;">$gt<span style="color: #800000;">":4}},{<span style="color: #800000;">"<span style="color: #800000;">$set<span style="color: #800000;">":{<span style="color: #800000;">"<span style="color: #800000;">age<span style="color: #800000;">":38}},{<span style="color: #800000;">"<span style="color: #800000;">multi<span style="color: #800000;">"<span style="color: #000000;">:true})
<span style="color: #008000;">#<span style="color: #008000;">4、修改内嵌文档,把名字为alex的人所在的地址国家改成Japan
db.user.update({<span style="color: #800000;">'<span style="color: #800000;">name<span style="color: #800000;">':<span style="color: #800000;">"<span style="color: #800000;">alex<span style="color: #800000;">"},{<span style="color: #800000;">"<span style="color: #800000;">$set<span style="color: #800000;">":{<span style="color: #800000;">"<span style="color: #800000;">addr.country<span style="color: #800000;">":<span style="color: #800000;">"<span style="color: #800000;">Japan<span style="color: #800000;">"<span style="color: #000000;">}})
<span style="color: #008000;">#<span style="color: #008000;">5、把名字为alex的人的地2个爱好改成piao
db.user.update({<span style="color: #800000;">'<span style="color: #800000;">name<span style="color: #800000;">':<span style="color: #800000;">"<span style="color: #800000;">alex<span style="color: #800000;">"},{<span style="color: #800000;">"<span style="color: #800000;">$set<span style="color: #800000;">":{<span style="color: #800000;">"<span style="color: #800000;">hobbies.1<span style="color: #800000;">":<span style="color: #800000;">"<span style="color: #800000;">piao<span style="color: #800000;">"<span style="color: #000000;">}})
<span style="color: #008000;">#<span style="color: #008000;">6、删除alex的爱好,$unset
db.user.update({<span style="color: #800000;">'<span style="color: #800000;">name<span style="color: #800000;">':<span style="color: #800000;">"<span style="color: #800000;">alex<span style="color: #800000;">"},{<span style="color: #800000;">"<span style="color: #800000;">$unset<span style="color: #800000;">":{<span style="color: #800000;">"<span style="color: #800000;">hobbies<span style="color: #800000;">":<span style="color: #800000;">""}})
<span style="color: #008000;">#
<span style="color: #008000;">1、所有人年龄增加一岁按照位置且只能从开头或结尾删除元素:$pop
<span style="color: #008000;">#<span style="color: #008000;">3、{"$pop":{"key":1}} 从数组末尾删除一个元素
<span style="color: #000000;">
db.user.update({<span style="color: #800000;">"<span style="color: #800000;">name<span style="color: #800000;">":<span style="color: #800000;">"<span style="color: #800000;">yuanhao<span style="color: #800000;">"},{<span style="color: #800000;">"<span style="color: #800000;">$pop<span style="color: #800000;">"<span style="color: #000000;">:{
<span style="color: #800000;">"<span style="color: #800000;">hobbies<span style="color: #800000;">":1<span style="color: #000000;">}
})
<span style="color: #008000;">#<span style="color: #008000;">4、{"$pop":{"key":-1}} 从头部删除
db.user.update({<span style="color: #800000;">"<span style="color: #800000;">name<span style="color: #800000;">":<span style="color: #800000;">"<span style="color: #800000;">yuanhao<span style="color: #800000;">"},{<span style="color: #800000;">"<span style="color: #800000;">$pop<span style="color: #800000;">"<span style="color: #000000;">:{
<span style="color: #800000;">"<span style="color: #800000;">hobbies<span style="color: #800000;">":-1<span style="color: #000000;">}
})
<span style="color: #008000;">#<span style="color: #008000;">5、按照条件删除元素,:"$pull" 把符合条件的统统删掉,而$pop只能从两端删
db.user.update({<span style="color: #800000;">'<span style="color: #800000;">addr.country<span style="color: #800000;">':<span style="color: #800000;">"<span style="color: #800000;">China<span style="color: #800000;">"},{<span style="color: #800000;">"<span style="color: #800000;">$pull<span style="color: #800000;">"<span style="color: #000000;">:{
<span style="color: #800000;">"<span style="color: #800000;">hobbies<span style="color: #800000;">":<span style="color: #800000;">"<span style="color: #800000;">read<span style="color: #800000;">"<span style="color: #000000;">}
},{
<span style="color: #800000;">"<span style="color: #800000;">multi<span style="color: #800000;">"<span style="color: #000000;">:true
}
)
db.urls.update({<span style="color: #800000;">"<span style="color: #800000;">_id<span style="color: #800000;">":1<span style="color: #000000;">},{
<span style="color: #800000;">"<span style="color: #800000;">$addToSet<span style="color: #800000;">"<span style="color: #000000;">:{
<span style="color: #800000;">"<span style="color: #800000;">urls<span style="color: #800000;">"<span style="color: #000000;">:{
<span style="color: #800000;">"<span style="color: #800000;">$each<span style="color: #800000;">"<span style="color: #000000;">:[
<span style="color: #800000;">'<span style="color: #800000;">http://www.baidu.com<span style="color: #800000;">'<span style="color: #000000;">,<span style="color: #800000;">'<span style="color: #800000;">http://www.baidu.com<span style="color: #800000;">'<span style="color: #000000;">,<span style="color: #800000;">'<span style="color: #800000;">http://www.xxxx.com<span style="color: #800000;">'<span style="color: #000000;">
]
}
}
}
)
删
删除多个中的第一个 db.user.deleteOne({ : 8<span style="color: #008000;">#<span style="color: #008000;">2、删除国家为China的全部
db.user.deleteMany( {<span style="color: #800000;">'<span style="color: #800000;">addr.country<span style="color: #800000;">': <span style="color: #800000;">'<span style="color: #800000;">China<span style="color: #800000;">'<span style="color: #000000;">} )<span style="color: #008000;">#<span style="color: #008000;">3、删除全部
db.user.deleteMany({})
<span style="color: #008000;">#
<span style="color: #008000;">聚合框架:<span style="color: #0000ff;">for n,item <span style="color: #0000ff;">in<span style="color: #000000;"> enumerate(l):
d=<span style="color: #000000;">{
<span style="color: #800000;">"<span style="color: #800000;">_id<span style="color: #800000;">"<span style="color: #000000;">:n,<span style="color: #800000;">'<span style="color: #800000;">name<span style="color: #800000;">'<span style="color: #000000;">:item[0],<span style="color: #800000;">'<span style="color: #800000;">sex<span style="color: #800000;">':item[1<span style="color: #000000;">],<span style="color: #800000;">'<span style="color: #800000;">age<span style="color: #800000;">':item[2<span style="color: #000000;">],<span style="color: #800000;">'<span style="color: #800000;">hire_date<span style="color: #800000;">':datetime.datetime.strptime(item[3],<span style="color: #800000;">'<span style="color: #800000;">%Y%m%d<span style="color: #800000;">'<span style="color: #000000;">),<span style="color: #800000;">'<span style="color: #800000;">post<span style="color: #800000;">':item[4<span style="color: #000000;">],<span style="color: #800000;">'<span style="color: #800000;">salary<span style="color: #800000;">':item[5<span style="color: #000000;">]
}
table.save(d)
<span style="color: #008000;">#<span style="color: #008000;">例2、select * from db1.emp where id > 3 group by post;
<span style="color: #000000;">db.emp.aggregate(
{<span style="color: #800000;">"<span style="color: #800000;">$match<span style="color: #800000;">":{<span style="color: #800000;">"<span style="color: #800000;">_id<span style="color: #800000;">":{<span style="color: #800000;">"<span style="color: #800000;">$gt<span style="color: #800000;">":3<span style="color: #000000;">}}},{<span style="color: #800000;">"<span style="color: #800000;">$group<span style="color: #800000;">":{<span style="color: #800000;">"<span style="color: #800000;">_id<span style="color: #800000;">":<span style="color: #800000;">"<span style="color: #800000;">$post<span style="color: #800000;">",<span style="color: #800000;">'<span style="color: #800000;">avg_salary<span style="color: #800000;">':{<span style="color: #800000;">"<span style="color: #800000;">$avg<span style="color: #800000;">":<span style="color: #800000;">"<span style="color: #800000;">$salary<span style="color: #800000;">"<span style="color: #000000;">}}}
)
<span style="color: #008000;">#<span style="color: #008000;">例3、select * from db1.emp where id > 3 group by post having avg(salary) > 10000;
<span style="color: #000000;">db.emp.aggregate(
{<span style="color: #800000;">"<span style="color: #800000;">$match<span style="color: #800000;">":{<span style="color: #800000;">"<span style="color: #800000;">_id<span style="color: #800000;">":{<span style="color: #800000;">"<span style="color: #800000;">$gt<span style="color: #800000;">":3<span style="color: #000000;">}}},<span style="color: #800000;">'<span style="color: #800000;">avg_salary<span style="color: #800000;">':{<span style="color: #800000;">"<span style="color: #800000;">$avg<span style="color: #800000;">":<span style="color: #800000;">"<span style="color: #800000;">$salary<span style="color: #800000;">"<span style="color: #000000;">}}},{<span style="color: #800000;">"<span style="color: #800000;">$match<span style="color: #800000;">":{<span style="color: #800000;">"<span style="color: #800000;">avg_salary<span style="color: #800000;">":{<span style="color: #800000;">"<span style="color: #800000;">$gt<span style="color: #800000;">":10000<span style="color: #000000;">}}}
)
<span style="color: #008000;">#<span style="color: #008000;">2、表达式之数学表达式
{<span style="color: #800000;">"<span style="color: #800000;">$add<span style="color: #800000;">":[expr1,expr2,...,exprN]} <span style="color: #008000;">#<span style="color: #008000;">相加
{<span style="color: #800000;">"<span style="color: #800000;">$subtract<span style="color: #800000;">":[expr1,expr2]} <span style="color: #008000;">#<span style="color: #008000;">第一个减第二个
{<span style="color: #800000;">"<span style="color: #800000;">$multiply<span style="color: #800000;">":[expr1,exprN]} <span style="color: #008000;">#<span style="color: #008000;">相乘
{<span style="color: #800000;">"<span style="color: #800000;">$divide<span style="color: #800000;">":[expr1,expr2]} <span style="color: #008000;">#<span style="color: #008000;">第一个表达式除以第二个表达式的商作为结果
{<span style="color: #800000;">"<span style="color: #800000;">$mod<span style="color: #800000;">":[expr1,expr2]} <span style="color: #008000;">#<span style="color: #008000;">第一个表达式除以第二个表达式得到的余数作为结果
<span style="color: #008000;">#<span style="color: #008000;">3、表达式之日期表达式:$year,$month,$week,$dayOfMonth,$dayOfWeek,$dayOfYear,$hour,$minute,$second<span style="color: #008000;">
<span style="color: #000000;">db.emp.aggregate(
{<span style="color: #800000;">"<span style="color: #800000;">$project<span style="color: #800000;">":{<span style="color: #800000;">"<span style="color: #800000;">name<span style="color: #800000;">":1,<span style="color: #800000;">"<span style="color: #800000;">hire_year<span style="color: #800000;">":{<span style="color: #800000;">"<span style="color: #800000;">$year<span style="color: #800000;">":<span style="color: #800000;">"<span style="color: #800000;">$hire_date<span style="color: #800000;">"<span style="color: #000000;">}}}
)
<span style="color: #008000;">#<span style="color: #008000;">例如查看每个员工的工作多长时间
<span style="color: #000000;">db.emp.aggregate(
{<span style="color: #800000;">"<span style="color: #800000;">$project<span style="color: #800000;">":{<span style="color: #800000;">"<span style="color: #800000;">name<span style="color: #800000;">":1,<span style="color: #800000;">"<span style="color: #800000;">hire_period<span style="color: #800000;">"<span style="color: #000000;">:{
<span style="color: #800000;">"<span style="color: #800000;">$subtract<span style="color: #800000;">"<span style="color: #000000;">:[
{<span style="color: #800000;">"<span style="color: #800000;">$year<span style="color: #800000;">"<span style="color: #000000;">:new Date()},{<span style="color: #800000;">"<span style="color: #800000;">$year<span style="color: #800000;">":<span style="color: #800000;">"<span style="color: #800000;">$hire_date<span style="color: #800000;">"<span style="color: #000000;">}
]
}}}
)
<span style="color: #008000;">#<span style="color: #008000;">4、字符串表达式
{<span style="color: #800000;">"<span style="color: #800000;">$substr<span style="color: #800000;">":[字符串/<span style="color: #000000;">$值为字符串的字段名,起始位置,截取几个字节]}
{<span style="color: #800000;">"<span style="color: #800000;">$concat<span style="color: #800000;">":[expr1,exprN]} <span style="color: #008000;">#<span style="color: #008000;">指定的表达式或字符串连接在一起返回,只支持字符串拼接
{<span style="color: #800000;">"<span style="color: #800000;">$toLower<span style="color: #800000;">"<span style="color: #000000;">:expr}
{<span style="color: #800000;">"<span style="color: #800000;">$toupper<span style="color: #800000;">"<span style="color: #000000;">:expr}
db.emp.aggregate( {<span style="color: #800000;">"<span style="color: #800000;">$project<span style="color: #800000;">":{<span style="color: #800000;">"<span style="color: #800000;">NAME<span style="color: #800000;">":{<span style="color: #800000;">"<span style="color: #800000;">$toupper<span style="color: #800000;">":<span style="color: #800000;">"<span style="color: #800000;">$name<span style="color: #800000;">"<span style="color: #000000;">}}})
<span style="color: #008000;">#<span style="color: #008000;">5、逻辑表达式
$<span style="color: #0000ff;">and<span style="color: #000000;">
$<span style="color: #0000ff;">or<span style="color: #000000;">
$<span style="color: #0000ff;">not<span style="color: #000000;">
其他见Mongodb权威指南
<span style="color: #008000;">#<span style="color: #008000;">2、分组后聚合得结果,类似于sql中聚合函数的聚合操作符:$sum、$avg、$max、$min、$first、$last<span style="color: #008000;">
db.emp.aggregate({<span style="color: #800000;">"<span style="color: #800000;">$group<span style="color: #800000;">":{<span style="color: #800000;">"<span style="color: #800000;">_id<span style="color: #800000;">":<span style="color: #800000;">"<span style="color: #800000;">$post<span style="color: #800000;">",<span style="color: #800000;">"<span style="color: #800000;">max_salary<span style="color: #800000;">":{<span style="color: #800000;">"<span style="color: #800000;">$max<span style="color: #800000;">":<span style="color: #800000;">"<span style="color: #800000;">$salary<span style="color: #800000;">"<span style="color: #000000;">}}})
<span style="color: #008000;">#<span style="color: #008000;">例2:去每个部门最大薪资与最低薪资
db.emp.aggregate({<span style="color: #800000;">"<span style="color: #800000;">$group<span style="color: #800000;">":{<span style="color: #800000;">"<span style="color: #800000;">_id<span style="color: #800000;">":<span style="color: #800000;">"<span style="color: #800000;">$post<span style="color: #800000;">",<span style="color: #800000;">"<span style="color: #800000;">max_salary<span style="color: #800000;">":{<span style="color: #800000;">"<span style="color: #800000;">$max<span style="color: #800000;">":<span style="color: #800000;">"<span style="color: #800000;">$salary<span style="color: #800000;">"},<span style="color: #800000;">"<span style="color: #800000;">min_salary<span style="color: #800000;">":{<span style="color: #800000;">"<span style="color: #800000;">$min<span style="color: #800000;">":<span style="color: #800000;">"<span style="color: #800000;">$salary<span style="color: #800000;">"<span style="color: #000000;">}}})
<span style="color: #008000;">#<span style="color: #008000;">例3:如果字段是排序后的,那么$first,$last会很有用,比用$max和$min效率高
db.emp.aggregate({<span style="color: #800000;">"<span style="color: #800000;">$group<span style="color: #800000;">":{<span style="color: #800000;">"<span style="color: #800000;">_id<span style="color: #800000;">":<span style="color: #800000;">"<span style="color: #800000;">$post<span style="color: #800000;">",<span style="color: #800000;">"<span style="color: #800000;">first_id<span style="color: #800000;">":{<span style="color: #800000;">"<span style="color: #800000;">$first<span style="color: #800000;">":<span style="color: #800000;">"<span style="color: #800000;">$_id<span style="color: #800000;">"<span style="color: #000000;">}}})
<span style="color: #008000;">#<span style="color: #008000;">3、数组操作符
{<span style="color: #800000;">"<span style="color: #800000;">$addToSet<span style="color: #800000;">"<span style="color: #000000;">:expr}:不重复
{<span style="color: #800000;">"<span style="color: #800000;">$push<span style="color: #800000;">"<span style="color: #000000;">:expr}:重复
<span style="color: #008000;">#<span style="color: #008000;">例:查询岗位名以及各岗位内的员工姓名:select post,group_concat(name) from db1.emp group by post;
db.emp.aggregate({<span style="color: #800000;">"<span style="color: #800000;">$group<span style="color: #800000;">":{<span style="color: #800000;">"<span style="color: #800000;">_id<span style="color: #800000;">":<span style="color: #800000;">"<span style="color: #800000;">$post<span style="color: #800000;">",<span style="color: #800000;">"<span style="color: #800000;">names<span style="color: #800000;">":{<span style="color: #800000;">"<span style="color: #800000;">$push<span style="color: #800000;">":<span style="color: #800000;">"<span style="color: #800000;">$name<span style="color: #800000;">"<span style="color: #000000;">}}})
db.emp.aggregate({<span style="color: #800000;">"<span style="color: #800000;">$group<span style="color: #800000;">":{<span style="color: #800000;">"<span style="color: #800000;">_id<span style="color: #800000;">":<span style="color: #800000;">"<span style="color: #800000;">$post<span style="color: #800000;">",<span style="color: #800000;">"<span style="color: #800000;">names<span style="color: #800000;">":{<span style="color: #800000;">"<span style="color: #800000;">$addToSet<span style="color: #800000;">":<span style="color: #800000;">"<span style="color: #800000;">$name<span style="color: #800000;">"}}})
<span style="color: #008000;">#
<span style="color: #008000;">例1、取平均工资最高的前两个部门练习题:
4<span style="color: #000000;">. 查询岗位名以及各岗位的平均薪资、最高薪资、最低薪资
db.emp.aggregate({<span style="color: #800000;">"<span style="color: #800000;">$group<span style="color: #800000;">":{<span style="color: #800000;">"<span style="color: #800000;">_id<span style="color: #800000;">":<span style="color: #800000;">"<span style="color: #800000;">$post<span style="color: #800000;">",<span style="color: #800000;">"<span style="color: #800000;">avg_salary<span style="color: #800000;">":{<span style="color: #800000;">"<span style="color: #800000;">$avg<span style="color: #800000;">":<span style="color: #800000;">"<span style="color: #800000;">$salary<span style="color: #800000;">"},<span style="color: #800000;">"<span style="color: #800000;">min_salary<span style="color: #800000;">":{<span style="color: #800000;">"<span style="color: #800000;">$min<span style="color: #800000;">":<span style="color: #800000;">"<span style="color: #800000;">$salary<span style="color: #800000;">"<span style="color: #000000;">}}})
5<span style="color: #000000;">. 查询男员工与男员工的平均薪资,女员工与女员工的平均薪资
db.emp.aggregate({<span style="color: #800000;">"<span style="color: #800000;">$group<span style="color: #800000;">":{<span style="color: #800000;">"<span style="color: #800000;">_id<span style="color: #800000;">":<span style="color: #800000;">"<span style="color: #800000;">$sex<span style="color: #800000;">",<span style="color: #800000;">"<span style="color: #800000;">avg_salary<span style="color: #800000;">":{<span style="color: #800000;">"<span style="color: #800000;">$avg<span style="color: #800000;">":<span style="color: #800000;">"<span style="color: #800000;">$salary<span style="color: #800000;">"<span style="color: #000000;">}}})
6<span style="color: #000000;">. 查询各岗位内包含的员工个数小于2的岗位名、岗位内包含员工名字、个数
db.emp.aggregate(
{
<span style="color: #800000;">"<span style="color: #800000;">$group<span style="color: #800000;">":{<span style="color: #800000;">"<span style="color: #800000;">_id<span style="color: #800000;">":<span style="color: #800000;">"<span style="color: #800000;">$post<span style="color: #800000;">",<span style="color: #800000;">"<span style="color: #800000;">count<span style="color: #800000;">":{<span style="color: #800000;">"<span style="color: #800000;">$sum<span style="color: #800000;">":1},<span style="color: #800000;">"<span style="color: #800000;">names<span style="color: #800000;">":{<span style="color: #800000;">"<span style="color: #800000;">$push<span style="color: #800000;">":<span style="color: #800000;">"<span style="color: #800000;">$name<span style="color: #800000;">"<span style="color: #000000;">}}
},{<span style="color: #800000;">"<span style="color: #800000;">$match<span style="color: #800000;">":{<span style="color: #800000;">"<span style="color: #800000;">count<span style="color: #800000;">":{<span style="color: #800000;">"<span style="color: #800000;">$lt<span style="color: #800000;">":2<span style="color: #000000;">}}},{<span style="color: #800000;">"<span style="color: #800000;">$project<span style="color: #800000;">":{<span style="color: #800000;">"<span style="color: #800000;">_id<span style="color: #800000;">":0,<span style="color: #800000;">"<span style="color: #800000;">names<span style="color: #800000;">":1,<span style="color: #800000;">"<span style="color: #800000;">count<span style="color: #800000;">":1<span style="color: #000000;">}}
)
7<span style="color: #000000;">. 查询各岗位平均薪资大于10000的岗位名、平均工资
db.emp.aggregate(
{
<span style="color: #800000;">"<span style="color: #800000;">$group<span style="color: #800000;">":{<span style="color: #800000;">"<span style="color: #800000;">_id<span style="color: #800000;">":<span style="color: #800000;">"<span style="color: #800000;">$post<span style="color: #800000;">",<span style="color: #800000;">"<span style="color: #800000;">avg_salary<span style="color: #800000;">":{<span style="color: #800000;">"<span style="color: #800000;">$avg<span style="color: #800000;">":<span style="color: #800000;">"<span style="color: #800000;">$salary<span style="color: #800000;">"<span style="color: #000000;">}}
},{<span style="color: #800000;">"<span style="color: #800000;">$match<span style="color: #800000;">":{<span style="color: #800000;">"<span style="color: #800000;">avg_salary<span style="color: #800000;">":{<span style="color: #800000;">"<span style="color: #800000;">$gt<span style="color: #800000;">":10000<span style="color: #000000;">}}},{<span style="color: #800000;">"<span style="color: #800000;">$project<span style="color: #800000;">":{<span style="color: #800000;">"<span style="color: #800000;">_id<span style="color: #800000;">":1,<span style="color: #800000;">"<span style="color: #800000;">avg_salary<span style="color: #800000;">":1<span style="color: #000000;">}}
)
8<span style="color: #000000;">. 查询各岗位平均薪资大于10000且小于20000的岗位名、平均工资
db.emp.aggregate(
{
<span style="color: #800000;">"<span style="color: #800000;">$group<span style="color: #800000;">":{<span style="color: #800000;">"<span style="color: #800000;">_id<span style="color: #800000;">":<span style="color: #800000;">"<span style="color: #800000;">$post<span style="color: #800000;">",{<span style="color: #800000;">"<span style="color: #800000;">$match<span style="color: #800000;">":{<span style="color: #800000;">"<span style="color: #800000;">avg_salary<span style="color: #800000;">":{<span style="color: #800000;">"<span style="color: #800000;">$gt<span style="color: #800000;">":10000,<span style="color: #800000;">"<span style="color: #800000;">$lt<span style="color: #800000;">":20000<span style="color: #000000;">}}},<span style="color: #800000;">"<span style="color: #800000;">avg_salary<span style="color: #800000;">":1<span style="color: #000000;">}}
)
9<span style="color: #000000;">. 查询所有员工信息,先按照age升序排序,如果age相同则按照hire_date降序排序
db.emp.aggregate(
{<span style="color: #800000;">"<span style="color: #800000;">$sort<span style="color: #800000;">":{<span style="color: #800000;">"<span style="color: #800000;">age<span style="color: #800000;">":1,<span style="color: #800000;">"<span style="color: #800000;">hire_date<span style="color: #800000;">":-1<span style="color: #000000;">}}
)
10<span style="color: #000000;">. 查询各岗位平均薪资大于10000的岗位名、平均工资,结果按平均薪资升序排列
db.emp.aggregate(
{
<span style="color: #800000;">"<span style="color: #800000;">$group<span style="color: #800000;">":{<span style="color: #800000;">"<span style="color: #800000;">_id<span style="color: #800000;">":<span style="color: #800000;">"<span style="color: #800000;">$post<span style="color: #800000;">",{<span style="color: #800000;">"<span style="color: #800000;">$sort<span style="color: #800000;">":{<span style="color: #800000;">"<span style="color: #800000;">avg_salary<span style="color: #800000;">":1<span style="color: #000000;">}}
)
11<span style="color: #000000;">. 查询各岗位平均薪资大于10000的岗位名、平均工资,取前1个
db.emp.aggregate(
{
<span style="color: #800000;">"<span style="color: #800000;">$group<span style="color: #800000;">":{<span style="color: #800000;">"<span style="color: #800000;">_id<span style="color: #800000;">":<span style="color: #800000;">"<span style="color: #800000;">$post<span style="color: #800000;">",{<span style="color: #800000;">"<span style="color: #800000;">$sort<span style="color: #800000;">":{<span style="color: #800000;">"<span style="color: #800000;">avg_salary<span style="color: #800000;">":-1<span style="color: #000000;">}},{<span style="color: #800000;">"<span style="color: #800000;">$limit<span style="color: #800000;">":1<span style="color: #000000;">},{<span style="color: #800000;">"<span style="color: #800000;">$project<span style="color: #800000;">":{<span style="color: #800000;">"<span style="color: #800000;">date<span style="color: #800000;">":new Date,<span style="color: #800000;">"<span style="color: #800000;">平均工资<span style="color: #800000;">":<span style="color: #800000;">"<span style="color: #800000;">$avg_salary<span style="color: #800000;">",<span style="color: #800000;">"<span style="color: #800000;">_id<span style="color: #800000;">"<span style="color: #000000;">:0}}
)
<span style="color: #008000;">#<span style="color: #008000;">2、use 数据库
db=client[<span style="color: #800000;">'<span style="color: #800000;">db2<span style="color: #800000;">'] <span style="color: #008000;">#<span style="color: #008000;">等同于:client.db1
<span style="color: #008000;">#<span style="color: #008000;">3、查看库下所有的集合
<span style="color: #0000ff;">print(db.collection_names(include_system_collections=<span style="color: #000000;">False))
<span style="color: #008000;">#<span style="color: #008000;">4、创建集合
table_user=db[<span style="color: #800000;">'<span style="color: #800000;">userinfo<span style="color: #800000;">'] <span style="color: #008000;">#<span style="color: #008000;">等同于:db.user
<span style="color: #008000;">#<span style="color: #008000;">5、插入文档
<span style="color: #0000ff;">import<span style="color: #000000;"> datetime
user0=<span style="color: #000000;">{
<span style="color: #800000;">"<span style="color: #800000;">_id<span style="color: #800000;">":1<span style="color: #000000;">,<span style="color: #800000;">"<span style="color: #800000;">name<span style="color: #800000;">":<span style="color: #800000;">"<span style="color: #800000;">egon<span style="color: #800000;">"<span style="color: #000000;">,<span style="color: #800000;">"<span style="color: #800000;">birth<span style="color: #800000;">"<span style="color: #000000;">:datetime.datetime.Now(),<span style="color: #800000;">'<span style="color: #800000;">city<span style="color: #800000;">':<span style="color: #800000;">'<span style="color: #800000;">BJ<span style="color: #800000;">'<span style="color: #000000;">
}
}
user1=<span style="color: #000000;">{
<span style="color: #800000;">"<span style="color: #800000;">_id<span style="color: #800000;">":2<span style="color: #000000;">,<span style="color: #800000;">'<span style="color: #800000;">city<span style="color: #800000;">':<span style="color: #800000;">'<span style="color: #800000;">weifang<span style="color: #800000;">'<span style="color: #000000;">
}
}
<span style="color: #008000;">#<span style="color: #008000;"> res=table_user.insert_many([user0,user1]).inserted_ids<span style="color: #008000;">
<span style="color: #008000;">#<span style="color: #008000;">6、查找
<span style="color: #008000;">#<span style="color: #008000;"> from pprint import pprint#格式化细<span style="color: #008000;">
<span style="color: #008000;">#<span style="color: #008000;"> print(table_user.find_one({"_id":{"$gte":1},"name":'egon'}))
<span style="color: #008000;">#<span style="color: #008000;">7、更新
table_user.update({<span style="color: #800000;">'<span style="color: #800000;">_id<span style="color: #800000;">':1},{<span style="color: #800000;">'<span style="color: #800000;">name<span style="color: #800000;">':<span style="color: #800000;">'<span style="color: #800000;">EGON<span style="color: #800000;">'<span style="color: #000000;">})
<span style="color: #008000;">#<span style="color: #008000;">8、传入新的文档替换旧的文档
<span style="color: #000000;">table_user.save(
{
<span style="color: #800000;">"<span style="color: #800000;">_id<span style="color: #800000;">":2<span style="color: #000000;">,<span style="color: #800000;">"<span style="color: #800000;">name<span style="color: #800000;">":<span style="color: #800000;">'<span style="color: #800000;">egon_xxx<span style="color: #800000;">'<span style="color: #000000;">
}
)