Mongodb

本文详细介绍MongoDB数据库的基础知识,包括其与关系型数据库的对比、安装配置、基本操作及高级命令。涵盖数据存储、索引、查询、更新等方面,适合初学者快速上手。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MongoDB数据库

1. 数据库(Database)

  • 按照数据结构来组织、管理和存储数据的仓库

2. 数据库分类

  • 关系型数据库(sql)
    • 代表: Access,mySql,SqlServer,oracle,db2
  • 非关系型数据库(NoSql)
    • 代表: MongoDB,Redis,HBase,CouchDB

3. 两个类型数据库的区别

  • 是否有表
  • 非关系型数据库的优势
    • 性能
      • NOSQL是基于键值对的,可以想象成表中的主键和值的对应关系,而且不需要经过SQL层的解析,所以性能非常高
    • 可扩展性
      • 同样也是因为基于键值对,数据之间没有耦合性,所以非常容易水平扩展
  • 关系型数据库的优势
    • 复杂查询
      • 可以用SQL语句方便的在多个表之间做非常复杂的数据查询
    • 事务支持
      • 使得对于安全性能很高的数据访问要求得以实现

4. 两个数据库构成

  • SQL
    • 数据库 - 表 - 行
  • NoSql(非关系型的数据库)
    • 数据库 - 集合 - 文档
      • 文档: 一个bson的键值对文档
    • 用于超大规模数据的存储

5. bson(Binary JSON)

  • bson是json的超集
  • bson比json多了二进制等数据类型
  • 支持Date和BinData类型
  • 支持内嵌的文档对象和数组对象
  • BSON有三个特点:轻量性、可遍历性、高效性
  • MongoDB的存储数据类型就是bson

6. MongoDB的安装和配置

  • 官网

https://www.mongodb.com/

  • Robo 3T可视化工具安装
  • 设置环境变量
  • 创建文件夹
    • 在d盘建立一个文件夹mongodb,并且建立子目录 db 和 log
    • 在log目录下建立一个文件MongoDB.log ,后缀为.log
      • d:\mongodb\db、d:\mongodb\log, 分别用来存放数据库文件和数据库日志文件
    • 把mongodb文件夹的只读属性去掉
  • 启动MongoDB
    • 以管理员身份运行cmd.exe,进入dos命令界面,执行下列命令
      mongod --storageEngine mmapv1 --dbpath "d:\mongodb\db" --logpath "d:\mongodb\log\MongoDB.log"
    • 原来的cmd窗口不关闭,以管理员身份再开一个cmd窗口,输入mongo或者mongo.exe
  • 输入exit或者ctrl+C可退出
  • 将MongoDB安装为windows服务
    • 以管理员身份运行cmd,进入bin文件夹,执行下列命令
      mongod --storageEngine mmapv1 --dbpath "d:\mongodb\db" --logpath "d:\mongodb\log\MongoDB.log" --install --serviceName "MongoDB"
    • 启动mongodb服务
      NET START MongoDB
    • 测试连接
      mongo
  • 关闭服务和删除进程
    - 先 ctrl+c,关闭服务net stop MongoDB

7. MongoDB特点

  • 分布式存储,由 C++ 语言编写
  • 是非关系型数据库当中功能最丰富,最像关系型数据库的
  • 高性能、易部署、易使用,存储数据非常方便
    • 面向集合存储,易存储对象类型的数据
    • 模式自由
    • 支持动态查询
    • 支持完全索引,包含内部对象
    • 支持查询
    • 支持复制和故障恢复
    • 使用高效的二进制数据存储,包括大型对象(如视频等)
    • 自动处理碎片,以支持云计算层次的扩展性
    • 支持RUBY,PYTHON,JAVA,C++,PHP等多种语言
    • 文件存储格式为BSON(一种JSON的扩展)

8. MongoDB基本操作【 CURD 】

  • 查看帮助
    • $ Help
  • 显示数据库列表
    • $ show dbs
  • 创建(切换)数据库
    • $ use dbname
  • 显示数据库中的集合
    • $ show collections
  • 增加
    • save
      • $ db.colName.save({})
    • insert
      • $ db.colName.insert({})
    • 区别: save对同一数据(主键已存在)是修改,insert是报错
    • _id是主键,主键是每条数据的唯一标识,不能重复
  • 删除
    • remove
    • 清空集合
      • $ db.colName.remove({})
    • 删除集合中一条
      • $ db.colName.remove({name: "node.js"})
    • 删除集合
      • $ db.colName.drop()
      • $ db.runCommand({"drop":"colName"})
    • 删除数据库
      • $ db.runCommand({ dropDatabase: 1})
  • 修改
    • update
      • db.colName.update( 匹配条件,修改内容(主键不能修改),是否全匹配,是否全修改)
      • $ db.colName.update({name: "node.js"},{$set: { age: 50}},true,true)
  • 查询
    • find
      • db.colName.find({}) 查询集合中的所有文档
      • db.colName.find({},{}) 将第二个参数中想显示的显示出来
        • $ db.colName.find({},{ _id: 0,name: "node.js",age: 1})
      • db.users.find().pretty()
        • 格式化查询到的数据
      • db.colName.find({}).sort({age: 1})
        • 根据年龄做排序 1是升序 -1 是降序
      • db.colName.find({}).limit()
        • 将查询出来的数据做一个截取
      • > $gt
      • < $lt
      • >= $gte
      • <= $lte

9. MongoDB高级命令

  • 条件查找
    • db.collection.find({ "key" : value })
      • 查找key = value的数据
    • db.collection.find({ "key" : { $gt: value } })
      • 查找key > value的数据
    • db.collection.find({ "key" : { $lt: value } })
      • 查找key < value的数据
    • db.collection.find({ "key" : { $gte: value } })
      • 查找key >= value的数据
    • db.collection.find({ "key" : { $lte: value } })
      • 查找key <= value的数据
    • db.collection.find({ "key" : { $gt: value1 , $lt: value2 } })
      • 查找value1 < key <value2的数据
    • db.collection.find({ "key" : { $ne: value } })
      • 查找key <> value的数据
    • db.collection.find({ "key" : { $mod : [ 10 , 1 ] } })
      • 取模运算,条件相当于key % 10 == 1 即key除以10余数为1的
    • db.collection.find({ "key" : { $in: [ 1, 2, 3 ] } })
      • 属于,条件相当于key等于[ 1, 2, 3 ]中任何一个
    • db.collection.find({ "key" : { $nin: [ 1, 2, 3 ] } })
      • 不属于,条件相当于key的值不属于[ 1, 2, 3 ]中任何一个
    • db.collection.find({ "key" : { $size: 1 } })
      • $size 数量、尺寸,条件相当于key对应的值的数量是1(值必须是数组)
    • db.collection.find({ "key" : { $exists : true|false } })
      • $exists 字段存在,true返回存在字段key的数据,false返回不存在字段key的数据
    • db.collection.find({ $or : [{a : 1}, {b : 2} ] })
      • 符合两个条件中任意一个的数据。$or语法表示或的意思。 (注意:MongoDB 1.5.3后版本可用),符合条件a=1的或者符合条件b=2的数据都会查询出来
    • db.collection.find({ "key.subkey" :value })
      • 内嵌对象中的值匹配,注意:"key.subkey"必须加引号
    • db.singer.insert({"name":"test2",score:{"yy":80,"sx":79,"wy":95}})
      • 插入一条测试数据,此数据的score对应的值是一个对象
  • 排序
    • db.collection.find().sort({ "key1" : -1 ,"key2" : 1 })
      • 1代表升序,-1代表降序
  • 索引
    • MongoDB使用 ensureIndex() 方法来创建索引
    • ensureIndex()方法基本语法格式:
      • >db.COLLECTION_NAME.ensureIndex({KEY:1})
      • 1为指定按升序创建索引,-1按降序来创建索引
    • ensureIndex() 方法中你也可以设置使用多个字段创建索引(关系型数据库中称作复合索引)
      • > db.col.ensureIndex({"title":1,"description":-1})
  • 其它
    • db.collection.find().limit(5)
      • 控制返回结果数量,如果参数是0,则没有约束,limit()将不起作用
    • db.collection.find().skip(5)
      • 控制返回结果跳过多少数量,如果参数是0,则当作没有约束,skip()将不起作用,或者说跳过了0条
    • db.collection.find().skip(5).limit(5)
      • 可用来做分页,跳过5条数据再取5条数据
    • db.collection.find().count()
      • count()返回结果集的条数
    • db.collection.find().skip(5).limit(5).count(true)
      • 在加入skip()和limit()这两个操作时,要获得实际返回的结果数,需要一个参数true,否则返回的是符合查询条件的结果总数
    • db.collection.find({"name":/ab/})
      • 模糊查询

10. 使用可视化工具

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值