MongoDB 记录
查询操作:
db.stu.find() //查询所有数据
db.stu.findOne() //查询一个数据
db.stu.find().pretty() //查询之后,格式化显示
db.stu.find({title:'html'}) //查询title为html的
db.stu.find({age:{$gte:18}}) //查询年龄大于等18的学生 逻辑与
db.stu.find({title:'python',count:{$gt:2}}) //查询title为python并且count大于2的 逻辑或
db.stu.find({$or:[{title:'python'},count:{$gt:2}]})//查询title为python 或者count大于2 in 或者 not in
db.stu.find({count:{$in:[1,2]}}) //查找count为1或者2的
db.stu.find({count:{$nin:[1,2]}}) //查找count不1或者2的 支持正则表达式
db.stu.find({name:/^黄/}) //查找名字以黄开头的 与js正则一样
db.stu.find({name:{$regex:"^黄"}}) //与上面等价 自定义查询函数(js函数)
db.stu.find({$where:function(){return this.age>20}})//与js一样,返回age大于20的数据
db.stu.find({$where:function(){return this.name.startwith('黄')}})//中间的函数是js代码,也就是说js字符串的函数都能被使用 limit用于读取指定数量的文档
skip用于跳过指定数量的文档
db.stu.find().limit(5) //读取返回的5条数据
db.stu.skip(2) //跳过2条数据,也就是从第三条数据开始显示 db.stu.skip(5).limit(5)//跳过前5条,从第6条开始显示接下来的5条数据 投影:查询结果中,只返回选择的字段
如:一个文档有5个字段,只显示前面3个
db.stu.find({查询条件},{name:1})//默认情况下_id是显示的,不想其显示,可以将_id设置为0
name:1说明显示name字段
db.stu.find({},{_id:0,name:1,age:1})//显示name和age 排序
默认排序是根据objectid进行的
sort{属性a:1,属性b:-1}
1为升序,-1降序
db.stu.find().sort({age:1})
db.stu.find().sort({age:-1})//按照age降序排序 统计个数
count()
db.stu.find({条件}).count()
db.stu.find({age:{$gt:20}}).count()//查询年龄大于20
db.stu.count({age:{$gt:20}}) //查询年龄大于20 数据去重
db.stu.distinct('去重字段',{条件})
db.stu.distinct('gender',{age:{$gt:20}})//对gender进行去重 聚合(用于统计)
主要计算数据
db.集合.aggregate([{管道:{表达式}}])
常用管道:
$group:将集合中文档分组
$match:过滤数据
$project:修改输入文档的结构,如重命名,增加删除字段,创建计算结构
$sort:将输入文档排序后输出
$limit:限制聚合管道返回的文档数
$skip:跳过指定文档的数量
$unwind:将数组类型的字段进行拆分
表达式
语法: '$列名' 常用表达式
$sum
$avg
$min $max
$push
$first $last db.stu.aggregate([
{
$group:{
_id:'$gender',//基于哪个字段进行分组.这里是基于gender进行分组
# _id:null,//将整个集合文档分为一组
# counter:{$sum:1}//counter为结果的名字,$sum计算分组中的个数
# counter:{$sum:'$age'},
# counter:{$first:'$gender'},
# counter:{$push:'$age'},//将分组的结果放到数组中(只存放每个文档的age属性)
# counter:{$push:'$$ROOT'},//将分组的结果放到数组中(将整个文档push到数组中)
}
}
]) db.stu.aggregate([
{
$match:{age:{$gt:20}, //查询年龄大于20},
$group:{
_id:"$gender",
counter:{$sum:'$age'} //把查询年龄大于20,作为分组的下一次数据
}
}
]) db.stu.aggregate([
{$match:{age:{$gt:20}, //查询年龄大于20}}
{$group:{
_id:"$gender",
counter:{$sum:'$age'} //把查询年龄大于20,作为分组的下一次数据
}},
{$project:{_id:0,counter:1}},
]) db.stu.aggregate([
{$match:{age:{$gt:20}, //查询年龄大于20}}
{$group:{
_id:"$gender",
counter:{$sum:'$age'} //把查询年龄大于20,作为分组的下一次数据
}},
{$project:{_id:0,counter:1}},
{$sort:{counter:1}},
]) db.stu.aggregate([
{$match:{age:{$gt:20}, //查询年龄大于20}}
{$group:{
_id:"$gender",
counter:{$sum:'$age'} //把查询年龄大于20,作为分组的下一次数据
}},
{$project:{_id:0,counter:1}},
{$sort:{counter:1}},
{$skip:1},//跳过去1个
]) db.stu.aggregate([
{$match:{age:{$gt:20}, //查询年龄大于20}}
{$group:{
_id:"$gender",
counter:{$sum:'$age'} //把查询年龄大于20,作为分组的下一次数据
}},
{$project:{_id:0,counter:1}},
{$sort:{counter:1}},
{$skip:1},//跳过去1个
{$limit:1},//取出一个
]) db.stu.insert({_id:1,title:'t-shirt',size:['M','L','S']})
db.stu.aggregate([
{$unwind:'$size'}//将size字段进行拆分
#{_id:1,title:'t-shirt',size:'M'}
#{_id:2,title:'t-shirt',size:'L'}
#{_id:3,title:'t-shirt',size:'S']}
])
拆分遇到null 空 没有 三种情况会出现数据丢失,解决办法 db.stu.insert({_id:1,title:'t-shirt',size:[]})
db.stu.insert({_id:2,title:'t-shirt'})
db.stu.insert({_id:3,title:'t-shirt',size:null})
db.stu.aggregate([
{$unwind:{path:'$size',preserverNullAndEmptyArrays:true}}//将size字段进行拆分
]) 采用角色-用户-数据管理方式
常用系统角色:
root:超级权限
read:允许用户读
readwrite:允许读写
常见超级管理员
use admin
db.createUser({
user:"admin",
pwd:'',
roles:[{role:'root',db:'admin'}]
})
默认没有授权,要修改配置文件
mongo -u admin -p 123 --authenticationDatabase test1 流程:
创建超级管理员
修改配置文件,启用身份验证
重启服务
使用超级管理员登陆
创建普通用户
使用普通用户登录 复制(副本集)
工作原理
设置复制
MongoDB 记录的更多相关文章
- 使用MongoDB 记录业务日志
最近公司有个需求,要对业务日志进行记录并根据日志排查问题,以前都是使用log4net之类的日志组件来记录到文件,这种方式已经不能满足业务的需要,因为日志文件会很大,即使进行分割后,查找也是很不方便,何 ...
- MongoDB记录(坑在末尾)
Mongo数据库基本配置 基本配置 密码配置 pymongo认证 参考资料 基本配置 基本配置包括 1.端口号:默认27017,安全性较低 2.数据库文件位置 3.日志文件位置 4.日志写入模式 5. ...
- CentOS 6.5下通过yum安装MongoDB记录
安装MongoDB 1.创建repo vi /etc/yum.repos.d/mongodb-org-3.6.repo [mongodb-org-3.6] name=MongoDB Repos ...
- MongoDB系列(一):简介及安装
什么是MongoDB MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统. 在高负载的情况下,添加更多的节点,可以保证服务器性能. MongoDB 旨在为应用提供可扩展的高 ...
- MongoDB学习笔记—Linux下搭建MongoDB环境
1.MongoDB简单说明 a MongoDB是由C++语言编写的一个基于分布式文件存储的开源数据库系统,它的目的在于为WEB应用提供可扩展的高性能数据存储解决方案. b MongoDB是一个介于关系 ...
- MongoDB安装说明以及MongoVUE使用
简单介绍mongoDb MongoDB是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案. MongoDB是一个介于关系数据库和非关系数据库之间的产 ...
- mongoDB global,startUplog
1,show logs (Ruiy看到一些人干些事就跟拉shit一样(磨叽),就来气,娃儿的,还不知所谓,抱怨,叫器一大堆!!!,喝喝,就这它还三心二意学一个故事中的主人公小小明上课偷打`皮卡`玩,三 ...
- 什么是MongoDB、特点、历史、下载和工具
什么是MongoDB ?MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统.在高负载的情况下,添加更多的节点,可以保证服务器性能.MongoDB 旨在为WEB应用提供可扩展 ...
- MongoDB数据模型(一)
原文地址 一.数据模型介绍 MongoDB中的数据有着灵活的架构.与SQL数据库不同,因为SQL数据库必须先定义表结构,然后才能向其中插入数据,而MongoDB的集合不强制任何文档结构.这个灵活性方便 ...
随机推荐
- 2017 ACM-ICPC 亚洲区(南宁赛区)网络赛:Frequent Subsets Problem (状态压缩)
题目链接 题目翻译: 给出一个数n,和一个浮点数a,数n代表全集U = {1,2,...,n},然后给出 M个U的子集,如果一个集合B(是U的子集),M个集合中有至少M*a个集合包含B, 则B这个集合 ...
- HDU1505 City Game 悬线法
题意: 给出一个像这样的矩阵 R F F F F F F F F F F F R R R F F F F F F F F F F F F F F F 求F组成的最大子矩阵(面积最大) 有多组数 ...
- java中并发Queue种类与各自API特点以及使用场景!
一 先说下队列 队列是一种数据结构.它有两个基本操作:在队列尾部加入一个元素,和从队列头部移除一个元素(注意不要弄混队列的头部和尾部) 就是说,队列以一种先进先出的方式管理数据,如果你试图向一个 已经 ...
- 移动端测试=== adb 无线连接手机
无线连接(需要借助 USB 线) 除了可以通过 USB 连接设备与电脑来使用 adb,也可以通过无线连接——虽然连接过程中也有需要使用 USB 的步骤,但是连接成功之后你的设备就可以在一定范围内摆脱 ...
- vm tools安装包为空
新装了linux mint虚拟机之后突然发现安装vm tools时为空 1.关闭虚拟机2.打开设置 3.把CD/DVD(SATA)从安装系统时挂载的镜像改为自动检测 4.重启安装vm tools发现没 ...
- 【2017-10-1】雅礼集训day1
今天的题是ysy的,ysy好呆萌啊. A: 就是把一个点的两个坐标看成差分一样的东西,以此作为区间端点,然后如果点有边->区间没有交. B: cf原题啊.....均摊分析,简单的那种. 线段树随 ...
- axios通过django的csrf验证
django会在浏览器的cookie里面保存一项csrftoken=GvzB3ilhlgadishmascacsilreclherlkjhaklsdv3qx4M96XRG88omScDPQaKoMxJ ...
- python基础-类的起源
Python中一切事物都是对象. class Foo(object): def __init__(self,name): self.name = name f = Foo("alex&quo ...
- OKR.2019
转眼又一年过去了,回顾审视一年的得失,规划下一年的奋斗目标.Review And Planning,让全新的2019迎来全新的自己. O1 学习软件开发技术知识 KR1.1 阅读<CLR via ...
- 读取文件和输入——read 脚本命令
Linux之read命令使用 read命令: read 命令从标准输入中读取一行,并把输入行的每个字段的值指定给 shell 变量 1)read后面的变量var可以只有一个,也可以有多个,这时如果输入 ...