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. MooseFS安装部署

    环境信息 Master服务器 dev04 chunkserver服务器 dev02.dev03.dev04 metalogger服务器 dev03 mount客户端 dev01.dev02 安装前下载 ...

  2. C#实现字符串相似度算法

    字符串的相似性比较应用场合很多,像拼写纠错.文本去重.上下文相似性等. 评价字符串相似度最常见的办法就是: 把一个字符串通过插入.删除或替换这样的编辑操作,变成另外一个字符串,所需要的最少编辑次数,这 ...

  3. 笔记:Xen虚拟机如何迁移到KVM上?

    众所周知如果是在Linux上使用虚拟化技术的话,就会有基于Xen Hypervisor部署一个系统的机会.因为基于内核的虚拟机(KVM:Kernel-Based Virtual Machine)已经逐 ...

  4. 数据分析之scipy常用方法(五)

    1 Scipy简介 Scipy依赖于Numpy Scipy提供了真正的矩阵 Scipy包含的功能:最优化.线性代数.积分.插值.拟合.特殊函数.快速傅里叶变换.信号处理.图像处理.常微分方程求解器等 ...

  5. [tools]excel转lua的python实现

    time:2015/04/13 描述:需要将excel表格内容转成lua,并且作为工具使用,能够批量转换 步骤: (1)文章[1]已经做了大部分的内容,而且也已经能够使用了 (2)根据自己新的需求: ...

  6. Java学习---JAVA的类设计

    基础知识 JAVA是由C/C++语言发展而来的纯面向对象语言,其基本元素包括:简单数据类型 和 复合数据类型(即类).类是对客观事物的抽象描述,它有面向对象的四个特点,即:封装性.继承性.多态性和通信 ...

  7. 如何查看SharePoint Server的版本信息

    可以通过查看注册表来得你当前运行的是SharePoint 2010的哪个版本,具体步骤如下: 1. 登录到安装了SharePoint Central Administration 的服务器. 2. 点 ...

  8. 移动App中常见的Web漏洞

    智能手机的存在让网民的生活从PC端开始往移动端转向,现在网民的日常生活需求基本上一部手机就能解决.外卖,办公,社交,银行转账等等都能通过移动端App实现.那么随之也带来了很多信息安全问题,大量的用户信 ...

  9. ES6重点--笔记(转)

    最常用的ES6特性 let, const, class, extends, super, arrow functions, template string, destructuring, defaul ...

  10. ZOJ1081 Points Within

    嘟嘟嘟 题面:给一个\(n\)个点的多边形和\(m\)个点,判断每一个点是否在多边形内. 解法:射线法. 就是从这个点引一条射线,如果与多边形有奇数个交点,则在多边形内部. 那么只用枚举每一条边,然后 ...