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的集合不强制任何文档结构.这个灵活性方便 ...
随机推荐
- Xor Sum(HDU4825 + 字典树)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4825 题目: 题意: 先给你n个数,再进行q次查询,每次查询数s与原来给的n个数异或和最大的数. 思 ...
- SQLServer 学习相关资料整理【转】
存储过程: SQL Server 存储过程 博客园上的一篇文章,讲解的非常详细,有测试代码,很实用. sqlserver存储过程中执行动态sql语句 The Curse and Blessings ...
- avalonJS-源码阅读(三) VMODEL
avalon的重头戏.终于要到我最期待的vmodel了. ps:这篇博文想做的全一点,错误少一点,所以会有后续的更新在这篇文章中. 状态:一稿 目录[-] avalon dom小结 数据结构 观察者模 ...
- 【不知道是啥的NOIP模拟赛】网络入侵
题意是这样的: 给你一棵树,每个边有一个初始的0/1边权.你希望把它弄成一个给定的样子. 你每次可以选一条树链取反,然后问你最少要操作几次. ----------------------------- ...
- UrlRouteModule
一.请求流程 当一个请求发往ASP.net MVC站点时的情景,IIS收到请求并将请求转到ASP.net,然后根据URL,或者更确切来说:被请求文件的扩展名.在IIS7 integrated模式下(默 ...
- Python3 出现'ascii' codec can't encode characters问题
当使用urllib.request.urlopen打开包含中文的链接时报错: from urllib import request url = 'https://baike.baidu.com/ite ...
- KVM和远程管理工具virt-manager
kvm在server端的部署(针对rhel6系统,可以构建本地更新源) 注意:如果只是安装管理工具,可以试试直接执行8步骤 1.对服务器实行kvm虚拟化首先需要确认服务器的物理硬件是否支持 cat / ...
- 洛谷P1782 旅行商的背包
传送门啦 这个题不用二进制优化的话根本不行,现学的二进制优化,调了一段时间终于A了,不容易.. 如果不懂二进制优化的话可以去看我那个博客 二进制优化多重背包入口 不想TLE,不要打memset,一定要 ...
- CSS — 贝塞尔曲线(cubic-bezier)
cubic-bezier 又称三次贝塞尔,主要是为 animation 生成速度曲线的函数,规定是 cubic-bezier(<x1>, <y1>, <x2>, & ...
- Linux学习笔记:touch新建文件、修改访问、改动时间
touch用于创建新的空文件或者修改已有文件的时间戳. 语法:touch file.txt 如果file存在,使用touch指令可更改这个文件或目录的日期时间,包括存取时间和更改时间. 如果file不 ...