MongoDB的入门
MongoDB
mongodb是非关系型数据库
对于关系型数据库,存储数据的时候需要提前建表建库,随着数据的复杂度越来越高,所建的表的数量也越来越多;但是非关系型却不需要
mongodb的基本的命令的使用
1. mongodb的数据库的命令
查看当前的数据库:db
查看所有的数据库:show dbs/databases
切换数据库:use db_name
删除当前的数据库:db.dropDatabase()
2. mongodb的集合的命令
不手动创建集合:向不存在的集合中第1次加数据时,集合会被创建出来
手动的创建集合:
db.createCollection(name,options)这给是模型name是要创建的的集合的名字,options是条件
db.createCollection("stu")
db.createCollection("sub",{capped:true,size:10})
capped默认false表示不设置上限,true表示设置上限,size表示上限为10,超过10的部分会覆盖之前的内容
查看集合:show collections
删除集合:db.集合名字.drop()
3. mongodb的增删改查
以下的所有的stu是集合的名字
增加之插入
- 特点:不设置_id自动匹配
db.stu.insert({name:"张三",age:18})
db.stu.insert({_id:20191919,name:"张三",age:18})
- 成功以后返回:WriteResult({ "nInserted" : 1 })
- 查看结果:db.stu.find()
{ "_id" : ObjectId("5c8b87514e2832ea3f36c903"), "name" : "张三", "age" : 18 }
{ "_id" : 20191919, "name" : "张三", "age" : 18 }
- 增加之保存
- 特点:保存的数据已存在及_id相同,会覆盖之前的数据
db.stu.save({_id:20191919,name:"二狗",age:22})
结果:
{ "_id" : ObjectId("5c8b87514e2832ea3f36c903"), "name" : "张三", "age" : 18 }
{ "_id" : 20191919, "name" : "二狗", "age" : 22 }
- 简单的查询:db.stu.find()
- 更新
db.集合名称.update(<query> ,<update>,{multi: <boolean>})
- query:查询条件,update:更新操作符(就是要改的内容),multi:可选, 默认是false,表示只更新一条,true的时候更新满足条件的所有的内容
db.stu.update({name:'hr'},{name:'mnc'}) 更新一条,覆盖式更新
db.stu.update({name:'hr'},{$set:{name:'hys'}}) 更新一条,只修改更新的那个
db.stu.update({},{$set:{gender:0}},{multi:true}) 更新全部,把所有gender的属性的gender的值改为0,无论有没有这个属性,没有的会添加这个属性
删除
db.集合名称.remove(<query>,{justOne: <boolean>})
- query:可以写也可不写,不写的话要用{}表示,justOne:默认false表示删除满足条件的所有的内容,改为true或1表示只删除一个
- db.stu.remove({})表示删除集合stu的所有的内容
4. mongodb的查询的多花样
- 4.1 返回的结果不同的查询
- db.stu.find(条件) 简单的返回满足条件的内容
- db.stu.findOne(条件) 简单的返回满足条件的一个内容
- db.stu.find(条件).pretty 简单的返回满足条件的格式化的内容
- 4.2 比较运算符
db.stu.insert([{"name" : "郭靖", "hometown" : "蒙古", "age" : 20, "gender" : true },{"name" : "黄蓉", "hometown" : "桃花岛", "age" : 18, "gender" : false },{"name" : "华筝", "hometown" : "蒙古", "age" : 18, "gender" : false },{"name" : "黄药师", "hometown" : "桃花岛", "age" : 40, "gender" : true },{"name" : "段誉", "hometown" : "大理", "age" : 16, "gender" : true },{"name" : "段王爷", "hometown" : "大理", "age" : 45, "gender" : true },{"name" : "洪七公", "hometown" : "华夏", "age" : 18, "gender" : true }])
- 等于: 默认是等于判断, 没有运算符
- $lt:小于 $lt:小于等于 $gt:大于 $gte:大于等于 $ne:不等于
- db.stu.find({age:{$gt:18}}) 大于18岁的人 $gt可以用所有的用算符
- 4.3 逻辑用算符
- and:在json中写多个条件即可: db.stu.find({age:{$gte:18},gender:true})
- or :使用$or,值为数组,数组中每个元素为json:db.stu.find({$or:[{age:{$gt:18}},{gender:false}]})
- and和or可以一起用:db.stu.find({$or:[{age:{$gte:18}},{gender:true}],name:'gj'})
- 4.4 范围运算符
- in :使用$in,$nin 判断数据是否在某个数组内:db.stu.find({age:{$in:[18,28,38]}}
- 4.5 正则表达式
- 使用//或$regex写正则表达式
- db.stu.find({name:/^asdas/})
- db.stu.find({name:{$regex:^asdas}})
- 使用//或$regex写正则表达式
- 4.6 skip和limit(可以想成mysql中的limit的两个值,skip表示跳过n个,从第n+1个开始。limit表示取多少个,建议如果两个一起用可以先用skip再用limit)
- skip单独使用:db.stu.find().skip(2)
- limit单独使用:db.stu.find().limit(2)
- 合用:db.stu.find().limit(2).skip(2)
- 4.7 投影:在查询到的返回结果中,只选择必要的字段
- db.集合名称.find({},{字段名称:1,...})
- 参数为字段与值,值为1表示显示,值为0不显 特别注意:对于_id列默认是显示的,如果不显示需要明确设置为0
- db.stu.find({},{_id:0,name:1})
- 4.8 排序:sort()写在db.stu.find()后
_ db.集合名称.find().sort({字段:1,...})
_ 参数1为升序排列 参数-1为降序排列
db.stu.find().sort({gender:-1,age:1})
- 4.9 统计个数:count()
- 条件写在find中:db.stu.find({gender:true}).count()
- 条件写在count中:db.stu.count({gender:true})
- 4.10 消除重复:distinct
- db.集合名称.distinct('去重字段',{条件})
db.stu.distinct('hometown',{age:{$gt:18}}))
- db.集合名称.distinct('去重字段',{条件})
5. mongodb的聚合:
- 聚合(aggregate)是基于数据处理的聚合管道,每个文档通过一个由多个阶段(stage)组成的管道,可以对每个阶段的管道进行分组、过滤等功能,然后经过一系列的处理,输出相应的结果。
- db.集合名称.aggregate({管道:{表达式}})
- 5.1 管道
- 5.1.1 管道命令之$group
- 特点:$group是所有聚合命令中用的最多的一个命令,用来将集合中的文档分组
db.stu.aggregate({$group:{_id:"$gender",total:{$sum:1}}})
- 其中注意点:
- db.db_name.aggregate是语法,所有的管道命令都需要写在其中
- _id 表示分组的依据,按照哪个字段进行分组,需要使用$gender表示选择这个字段进行分组
- $sum:1 表示把每条数据作为1进行统计,统计的是该分组下面数据的条数
- 特点:$group是所有聚合命令中用的最多的一个命令,用来将集合中的文档分组
- 5.1.2 group by null
- 特点:当我们需要统计整个文档的时候,$group 的另一种用途就是把整个文档分为一组进行统计
db.stu.aggregate({$group:{_id:null,total:{$sum:1}}})
- _id:null 表示不指定分组的字段,即统计整个文档,此时获取的total表示整个文档的个数
- 特点:当我们需要统计整个文档的时候,$group 的另一种用途就是把整个文档分为一组进行统计
- 5.1.3 透视
- 特点:使用$push后面跟"$name"显示所有的name,如果是"$$ROOT"显示说有的内容
db.stu.aggregate({$group:{_id:null,name:{$push:"$name"}}})
db.stu.aggregate({$group:{_id:null,name:{$push:"$$ROOT"}}})
- 5.1.4 练习
db.tv3.insert([{ "country" : "china", "province" : "sh", "userid" : "a" },{ "country" : "china", "province" : "sh", "userid" : "b" },{ "country" : "china", "province" : "sh", "userid" : "a" },{ "country" : "china", "province" : "sh", "userid" : "c" },{ "country" : "china", "province" : "bj", "userid" : "da" },{ "country" : "china", "province" : "bj", "userid" : "fa" }])
db.tv3.aggregate([ {$group:{_id:{country:"$country",province:"$province",userid:"$userid"}}}, {$group:{_id:{country:"$_id.country",province:"$_id.province"},total:{$sum:1}}} ])
- 5.2 管道之
$match
- 特点:
$match
用于进行数据的过滤,是在能够在聚合操作中使用的命令,和find区别在于$match
操作可以把结果交给下一个管道处理,而find不行
db.stu.aggregate({$match:{age:{$gt:18}}})
年龄大于18岁的人
db.stu.aggregate([{$match:{age:{$gt:18}}},{$group:{_id:"$gender",total:{$sum:1}}}])
年龄大于18的男女的人数
- 特点:
- 5.3 管道之
$project
- 特点:
$project
用于修改文档的输入输出结构,例如重命名,增加,删除字段
db.stu.aggregate({$project:{_id:0,name:1,age:1}})
输出name和age
db.stu.aggregate([{$group:{_id:"$gender",counter:{$sum:1}}},{$project:{_id:0,counter:1}}])
输出各个性别的人数
- 特点:
- 5.4 管道之
$sort
- 特点:
$sort
用于将输入的文档排序后输出
db.stu.aggregate({$sort:{age:1}})
age升序
db.stu.aggregate([{$group:{_id:"$gender",counter:{$sum:1}}},{$sort:{counter:-1}}])
gender分组,counter降序
- 特点:
- 5.5 管道命令之
$skip
和$limit
- 特点:
$limit
限制返回数据的条数;$skip
跳过指定的文档数,并返回剩下的文档数;同时使用时先使用skip在使用limit
db.stu.aggregate([{$skip:2},{$limit:2}])
从第3个开始,返回3,4两个
db.stu.aggregate([{$group:{_id:"$gender",counter:{$sum:1}}},{$sort:{counter:-1}},{$skip:1},{$limit:1}])
gender分组,counter降序,返回第二个
- 特点:
- 5.1.1 管道命令之$group
MongoDB的入门的更多相关文章
- 前端开发小白必学技能—非关系数据库又像关系数据库的MongoDB快速入门命令(2)
今天给大家道个歉,没有及时更新MongoDB快速入门的下篇,最近有点小忙,在此向博友们致歉.下面我将简单地说一下mongdb的一些基本命令以及我们日常开发过程中的一些问题.mongodb可以为我们提供 ...
- mongodb新手入门,mongodb命令学习
下面来总结一下mongodb新手入门的常用命令吧.要是您是mongodb新手,可以看下. 1,show dbs 查询mongodb里面的数据库列表 如果想查看当前连接在哪个数据库下面,可以直接输入db ...
- Node.js和MongoDB - MongoJS入门
第一次尝试翻译外国牛人的博文,希望大家喜欢. 本文源码详见:https://github.com/njaulj/mongojs 一点都不夸大的说,近年来node.js和mongodb的确是大放异彩,在 ...
- 大数据应用之:MongoDB从入门到精通你不得不知的21个为什么?
一.引言: 互联网的发展和电子商务平台的崛起,催生了大数据时代的来临,作为大数据典型开发框架的MongoDB成为了No-sql数据库的典型代表.MongoDB从入门到精通你不得不知的21个为什么专为大 ...
- MongoDb 快速入门教程
文章首发于[博客园-陈树义],点击跳转到原文MongoDb 快速入门教程. MongoDb 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的. 它是可扩展的 ...
- 在.Net Core中使用MongoDB的入门教程(二)
在上一篇文章中,讲到了MongoDB在导入驱动.MongoDB的连接,数据的插入等. 在.Net Core中使用MongoDB的入门教程(一) 本篇文章将接着上篇文章进行介绍MongoDB在.Net ...
- 在.Net Core中使用MongoDB的入门教程(一)
首先,我们在MongoDB的官方文档中看到,MongoDb的2.4以上的For .Net的驱动是支持.Net Core 2.0的. 所以,在我们安装好了MangoDB后,就可以开始MangoDB的.N ...
- Mongodb的入门(8)mongodb事物分析
老生常谈:<在前面博客中也介绍过> mongodb官网:https://docs.mongodb.com/manual/introduction/ mongodb:官网上是这样定义的Mon ...
- MongoDB基础入门视频教程
MongoDB基础入门视频教程http://www.icoolxue.com/album/show/98
- mongodb的入门CURD
mongodb的入门CURD #查看所有数据库show dbs;show databases; #有些版本可能不行 #使用数据库use 数据库名 #查看集合(集合即mysql的表)show table ...
随机推荐
- 从零学React Native之04自定义对话框
本篇主要介绍: 1. 自定义组件 2. Alert 对话框 自定义对话框 之前的我都是利用React Native提供的基础组件对它们进行排列组合, 其实自定义也很简单, 我们还是拿上一篇文章的例子进 ...
- sequelize 学习之路
如果你觉得Sequelize的文档有点多.杂,不方便看,可以看看这篇. 在使用NodeJS来关系型操作数据库时,为了方便,通常都会选择一个合适的ORM(Object Relationship Mode ...
- Server runtime
spring mvc常用的注解: 个介绍. @Controller @Controller 负责注册一个bean 到spring 上下文中,bean 的ID 默认为 类名称开头字母小写,你也可以自己指 ...
- 【Leetcode】【Easy】Contains Duplicate
Given an array of integers, find if the array contains any duplicates. Your function should return t ...
- [mutt] Configure mutt to receive email via IMAP and send via SMTP
“All mail clients suck. This one [mutt] just sucks less.” Michael Elkins, ca. 1995 Actually I have t ...
- 在Activities之间导航
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="ht ...
- php给$_POST赋值会导致值为空
在调试一个程序的时候发现很奇怪的现象,post传过来的值再某些地方为空,先看下面的代码 <?php if($_POST['submit'] == 'Add'){ if($_POST['type' ...
- 微软报表A4纸大小规则
总页宽:21cm,总页高:29.7cm 上下左右边距均为2.5cm 页眉页脚均为0.75cm 正文内容宽:16cm,高23.2cm
- globalsign代码签名最新步骤
1.确认gs发的token里边有你的数字证书-需按对方要求步骤提取到 2. 到globalsign.cn上下载数字签名工具:安装后联系支持.要到该工具对应授权文件 3. (如驱动签名)签名工具> ...
- SQL监控:mysql及mssql数据库SQL执行过程监控审计
转载 Seay_法师 最近生活有很大的一个变动,所以博客也搁置了很长一段时间没写,好像写博客已经成了习惯,搁置一段时间就有那么点危机感,心里总觉得不自在.所以从今天起还是要继续拾起墨笔(键盘),继续好 ...