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}})
  • 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}}))

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进行统计,统计的是该分组下面数据的条数
    • 5.1.2 group by null
      • 特点:当我们需要统计整个文档的时候,$group 的另一种用途就是把整个文档分为一组进行统计

        db.stu.aggregate({$group:{_id:null,total:{$sum:1}}})
      • _id:null 表示不指定分组的字段,即统计整个文档,此时获取的total表示整个文档的个数
    • 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降序,返回第二个

MongoDB的入门的更多相关文章

  1. 前端开发小白必学技能—非关系数据库又像关系数据库的MongoDB快速入门命令(2)

    今天给大家道个歉,没有及时更新MongoDB快速入门的下篇,最近有点小忙,在此向博友们致歉.下面我将简单地说一下mongdb的一些基本命令以及我们日常开发过程中的一些问题.mongodb可以为我们提供 ...

  2. mongodb新手入门,mongodb命令学习

    下面来总结一下mongodb新手入门的常用命令吧.要是您是mongodb新手,可以看下. 1,show dbs 查询mongodb里面的数据库列表 如果想查看当前连接在哪个数据库下面,可以直接输入db ...

  3. Node.js和MongoDB - MongoJS入门

    第一次尝试翻译外国牛人的博文,希望大家喜欢. 本文源码详见:https://github.com/njaulj/mongojs 一点都不夸大的说,近年来node.js和mongodb的确是大放异彩,在 ...

  4. 大数据应用之:MongoDB从入门到精通你不得不知的21个为什么?

    一.引言: 互联网的发展和电子商务平台的崛起,催生了大数据时代的来临,作为大数据典型开发框架的MongoDB成为了No-sql数据库的典型代表.MongoDB从入门到精通你不得不知的21个为什么专为大 ...

  5. MongoDb 快速入门教程

    文章首发于[博客园-陈树义],点击跳转到原文MongoDb 快速入门教程. MongoDb 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的. 它是可扩展的 ...

  6. 在.Net Core中使用MongoDB的入门教程(二)

    在上一篇文章中,讲到了MongoDB在导入驱动.MongoDB的连接,数据的插入等. 在.Net Core中使用MongoDB的入门教程(一) 本篇文章将接着上篇文章进行介绍MongoDB在.Net ...

  7. 在.Net Core中使用MongoDB的入门教程(一)

    首先,我们在MongoDB的官方文档中看到,MongoDb的2.4以上的For .Net的驱动是支持.Net Core 2.0的. 所以,在我们安装好了MangoDB后,就可以开始MangoDB的.N ...

  8. Mongodb的入门(8)mongodb事物分析

    老生常谈:<在前面博客中也介绍过> mongodb官网:https://docs.mongodb.com/manual/introduction/ mongodb:官网上是这样定义的Mon ...

  9. MongoDB基础入门视频教程

    MongoDB基础入门视频教程http://www.icoolxue.com/album/show/98

  10. mongodb的入门CURD

    mongodb的入门CURD #查看所有数据库show dbs;show databases; #有些版本可能不行 #使用数据库use 数据库名 #查看集合(集合即mysql的表)show table ...

随机推荐

  1. mvn install 时候报GBK编码错误解决办法

    在pom.xml里面 <properties> <!-- 文件拷贝时的编码 --> <project.build.sourceEncoding>UTF-</p ...

  2. Windows下部署ElasticSearch5.0以下版本

    Windows下部署ElasticSearch分ElasticSearch5.0以上版本(包括5.0)和ElasticSearch5.0以下版本两种情况,这两种安装方式有很大不同.今天首先说Elast ...

  3. Protocol Buffer学习笔记

    Protocol Buffer Protobuf基础概念 Protobuf是google开发的数据结构描述语言,能够将结构化数据序列化与反序列化,取代json和xml,常用于服务器通信协议.RPC系统 ...

  4. Linux案例01:eth0网卡异常

    一.现象描述 今天在调试两台物理机,做完配置重启主机后,发现一台服务器网络无法ssh连接,通过ILO进去ifconfig发现eth0配置的IP地址等信息丢失,手动重启后,可以ssh连接,但过一段时间, ...

  5. [翻译] AsyncDisplayKit

    AsyncDisplayKit AsyncDisplayKit is an iOS framework that keeps even the most complex user interfaces ...

  6. 绘制虚线的UIView

    绘制虚线的UIView CAShapeLayer配合贝塞尔曲线可以绘制曲线,笔者继承了一个UIView的子类,并将该子类的backedLayer替换为CAShapeLayer,以此来实现绘制虚线的效果 ...

  7. Ubuntu18.04 vmware环境下配置静态ip

    各种linux系统发行版本配置静态ip方法各不相同,dhcp获取的话ip可能会变动,如果用xshell等工具连接的时候还要改ip,很是麻烦: 参考了网上各种配置Ubuntu18.04配置静态ip的方法 ...

  8. 数据库相关文章转载(2) MySQL自带的性能压力测试工具mysqlslap详解

    PS:今天一同事问我有木有比较靠谱的mysql压力测试工具可用.其实mysql自带就有一个叫mysqlslap的压力测试工具,还是模拟的不错的.下面举例说说.mysqlslap是从5.1.4版开始的一 ...

  9. August 26th 2017 Week 34th Saturday

    Love means finding the beauty in someone's imperfections. 爱情就是在那个人的不完美中找到美. Our mate isn't actually ...

  10. August 14th 2017 Week 33rd Monday

    Life is like a watch, you can return to the starting point, they are not yesterday! 人生就像钟表,可以回到起点,却已 ...