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. ubuntu桌面安装常用软件&及常见问题

    自己从windows转向ubuntu桌面开发,根据需求安装以下文件: ubuntu 桌面版下载:http://www.ubuntu.org.cn/download/desktop 有的公司设置静态ip ...

  2. Windows10禁用update

    1.运行 gpedit.msc 或搜索 组策略 ,点 计算机配置—管理模板—Windows组件—Windows更新—配置自动更新 ,设置“已禁用”.2.点 控制面板—系统和安全—管理工具 ,点 服务 ...

  3. 连接到 Azure 上的 SQL Server 虚拟机(经典部署)

    概述 本主题介绍如何连接到运行于 Azure 虚拟机的 SQL Server 实例. 它介绍了一些常规连接方案,并提供了在 Azure VM 中配置 SQL Server 连接的详细步骤. Impor ...

  4. excel展示

  5. 020.1.1 collections集合工具类

    内容:常见需求以及使用—逆转比较器顺序,最值和同步方法 collections类的方法都是静态方法 强行逆转比较器的顺序例子: //##主函数.java List<String> list ...

  6. TCP握手建立与释放连接

    网络层次模型 TCP/UDP区别 UDP,在传送数据前不需要先建立连接,远地的主机在收到UDP报文后也不需要给出任何确认.虽然UDP不提供可靠交付,但是正是因为这样,省去和很多的开销,使得它的速度比较 ...

  7. canvas小球 时间倒计时demo-优化

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  8. python新建以时间命名的目录

    1.新建三级目录,第一级是去年的年份,第二级是去年的月,第三级为去年的日,在日的文件中写入今年的时分秒 import os import time import shutil def create_f ...

  9. Nginx学习.md

    正常运行的必备配置 user Syntax: user user [group]; Default: user nobody nobody; Context: main 指定运行worker进程的用户 ...

  10. 面向对象的JavaScript --- 多态

    面向对象的JavaScript --- 多态 多态 "多态"一词源于希腊文 polymorphism,拆开来看是poly(复数)+ morph(形态)+ism,从字面上我们可以理解 ...