MongoDB

MongoDB简介

MongoDB是用C++语言编写的非关系型数据库。特点是高性能、易部署、易使用,存储数据十分方便,主要特性有:

  • 面向集合存储,易于存储对象类型的数据
  • 模式自由
  • 支持动态查询
  • 支持完全索引,包含内部对象
  • 支持复制和故障恢复
  • 使用高效的二进制数据存储,包括大型对象
  • 文件存储格式为BSON(一种JSON的扩展)

MongoDB基本概念介绍

  • 文档(document)是MongoDB中数据的基本单元,非常类似于关系型数据库系统中的行(但是比行要复杂的多)
  • 集合(collection)就是一组文档,如果说MongoDB中的文档类似于关系型数据库中的行,那么集合就如同表
  • MongoDB的单个计算机可以容纳多个独立的数据库,每一个数据库都有自己的集合和权限
  • MongoDB自带简洁但功能强大的JavaScript shell,这个工具对于管理MongoDB实例和操作数据作用非常大
  • 每一个文档都有一个特殊的键"_id",它在文档所处的集合中是唯一的,相当于关系数据库中的表的主键

MongoDB数据类型

数据类型 描述 举例
null 表示空值或者未定义的对象 {"x":null}
布尔值 真或者假:true或者false
32位整数 32位整数。shell是不支持该类型的,shell中默认会转换成64位浮点数
64位整数 64位整数。shell是不支持该类型的,shell中默认会转换成64位浮点数
64位浮点数 64位浮点数。shell中的数字就是这一种类型
字符串 UTF-8字符串 {"foo":"bar"}
符号 shell不支持,shell会将数据库中的符号类型的数据自动转换成字符串
对象id 文档的12字节的唯一id {"id": ObjectId()}
日期 从标准纪元开始的毫秒数 {"date":new Date()}
正则表达式 文档中可以包含正则表达式,遵循JavaScript的语法 {"foo":/foobar/i}
代码 文档中可以包含JavaScript代码 {"x":function() {}}
未定义 undefined {"x":undefined}
数组 值的集合或者列表 {"arr": ["a","b"]}
内嵌文档 文档可以作为文档中某个key的value {"x":{"foo":"bar"}}

下载MongoDB

https://www.mongodb.com
https://fastdl.mongodb.org/osx/mongodb-osx-ssl-x86_64-3.4.3.tgz

Mac OSX 平台安装 MongoDB

cd /usr/local
sudo curl -O https://fastdl.mongodb.org/osx/mongodb-osx-ssl-x86_64-3.4.3.tgz
sudo tar -zxvf mongodb-osx-ssl-x86_64-3.4.3.tgz
sudo mv mongodb-osx-x86_64-3.4.2 mongodb

安装完成后,我们可以把 MongoDB 的二进制命令文件目录(安装目录/bin)添加到 PATH 路径中:

export PATH=/usr/local/mongodb/bin:$PATH

运行 MongoDB

首先我们创建一个数据库存储目录 /data/db:

sudo mkdir -p /data/db

启动 mongodb,默认数据库目录即为 /data/db:

sudo mongod

# 如果没有创建全局路径 PATH,需要进入以下目录
cd /usr/local/mongodb/bin
sudo ./mongod   

连接到MongoDB

连接请自行百度😆😆😆😆

MongoDB常用操作

  • 创建数据库,使用命令 use 数据库名称 ,如:

      use mydb1
    
  • 删除当前数据库

      db.dropDatabase()
    
  • 查看所有数据库,使用命令

      show dbs 
    
  • 查看当前所在数据库

      db
    
  • 查看当前数据库中所有的集合

      show collections 
      或使用
      show tables
    
  • 创建集合有两种方式,显示创建和隐式创建

      显示创建可以使用命令 db.createCollection(“集合名称")
      隐式创建可以使用命令 db.集合名称.insert({}),指创建集合并同时向集合中插入数据
    
  • 向集合添加文档

      db.集合名称.insert({})
    
  • 删除集合中的文档

      db.集合名称.remove({删除条件})
    
  • 查询集合中的文档

      db.集合名称.find({条件}),或者使用 db.集合名称.findOne()  查询第一个文档
    
  • 查询集合中的文档 ,使用条件表达式(<, <=, >, >=,!=)

      //大于: field > value
      db.collection.find({field:{$gt:value}});
    
      //小于: field < value
      db.collection.find({field:{$lt:value}});
    
      //大于等于: field >= value
      db.collection.find({field:{$gte:value}});
    
      //小于等于: field <= value
      db.collection.find({field:{$lte:value}});
    
      //不等于:  field != value
      db.collection.find({field:{$ne:value}});
    
  • 查询集合中的文档 ,统计(count)、排序(sort)、分页(skip、limit)

      db.customer.count();
      db.customer.find().count();
      db.customer.find({age:{$lt:5}}).count();
      db.customer.find().sort({age:1}); 降序-1
      db.customer.find().skip(2).limit(3);
      db.customer.find().sort({age:-1}).skip(2).limit(3);
      db.customer.find().sort({age:-1}).skip(2).limit(3).count();
      db.customer.find().sort({age:-1}).skip(2).limit(3).count(0);
      db.customer.find().sort({age:-1}).skip(2).limit(3).count(1);
    
  • 查询集合中的文档 ,$all主要用来查询数组中的包含关系,查询条件中只要有一个不包含就不返回

  • 查询集合中的文档 ,$in,类似于关系型数据库中的IN

  • 查询集合中的文档 ,$nin,与$in相反

  • 查询集合中的文档 ,$or,相当于关系型数据库中的OR,表示或者的关系,例如查询name为user2或者age为3的文档,命令为:

      db.customer.find({$or:[{name:”user2”},{age:3}]})
    
  • 查查询集合中的文档 ,$nor,表示根据条件过滤掉某些数据,例如查询name不是user2,age不是3的文档,命令为:

      db.customer.find({$nor:[{name:”user2”},{age:3}]})
    
  • 查询集合中的文档 ,$exists,用于查询集合中存在某个键的文档或不存在某个键的文档,例如查询customer集合中存在name键的所有文档,可以使用 db.customer.find({name:{$exists:1}}),

      $exists:1表示真,指存在
      $exists:0表示假,指不存在
    

更新集合中的文档,语法如下:

db.collection.update(criteria,objNew,upsert,multi)

参数说明:
criteria:用于设置查询条件的对象
objNew:用于设置更新内容的对象
upsert:如果记录已经存在,更新它,否则新增一个记录,取值为0或1
multi:如果有多个符合条件的记录,是否全部更新,取值为0或1

注意:默认情况下,只会更新第一个符合条件的记录
一般情况下后两个参数分别为0,1 ,即:
db.collection.update(criteria,objNew,0,1)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容