MongoDB数据库的使用

2021年2月25日 15点热度 0条评论 来源: 小手冰凉的007

一、MongoDB的认识

  • MongoDB 是一个基于分布式文件存储的数据库。
  • 由 C++ 语言编写,是一个开源数据库系统。
  • 旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。
  • MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
  • MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。
  • MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。
  • 在高负载的情况下,添加更多的节点,可以保证服务器性能。

二、关系型数据库(mysql)与非关系型数据库(mongodb)的区别

  1. 关系型数据库
    1. 特性:
    - 关系型数据库是指采用了关系模型来组织数据的数据库;
    - 关系型数据库的最大特点就是事务的一致性
    - 简单来说,关系模型指的就是二维表格模型,关系型数据库就是 由二维表及其之间的关联组成的数据组织.
    2. 优点:
    - 容易理解;
    - 使用方便;
    - 易于维护;
    - 支持SQL,可用于复杂的查询
    3. 缺点:
    - 为了维护一执行需要消耗大量的性能,影响读写
    - 固定的表结构
    - 高并发读写需求
    - 海量数据的高效率读写

  2. 非关系型数据库:
    1. 特性:
    - 使用键值对存储数据
    - 分布式
    - 不支持ACID特性
    - 非关系型数据库严格上来说,不算是一种数据库,应该是一种数据结构化存储方法的集合
    2. 优点:
    - 无需经过sql层的解析,读写性能高;
    - 基于键值对,数据没有耦合性,容易扩展;
    - 存储数据的格式,nosql使用key:val的形式,文档的形式,图片形式等等,而关系型数据库则只支持基础类型
    3. 缺点:
    - 不提供sql支持,学习成本高
    - 无事务处理,附加功能和报表支持也不好

三、下载,安装和连接

  1. 下载
  2. 连接mongoDB数据库
    - 2.1. 在任意盘符下创建新文件夹(data),在新文件夹内,再创建新文件夹(db)
    - 2.2. 在安装目录中进入bin文件夹,打开命令提示符(命令提示符中路径必须为当前bin目录,最好以管理员方式打开命令提示符)
    - 在命令提示符中输入:mongod --dbpath d:\data\db (在出现的众多提示中,如果出现:waiting for connections on port 27017。表示连接成功)
    - 切记:当前命令提示符不要关闭,重新在bin目录下打开一个命令提示符
    - 在新打开的命令提示符中输入:mongo。进入mongo操作状态
    - 开始mongodb数据库的命令操作

四、mongoDB的常用指令

  1. 数据库操作:
use dbName
//创建并选择:(有则选,无则建)
db
//查看当前数据库
show dbs
//查看所有数据库
db.getMongo()
//查看数据库的链接地址
db.version()
//查看数据库的版本信息
db.getName()
//查看当前数据库名称

db.dropDatabase()
//删除数据库 -- 慎用

  1. 集合的操作
//1.创建集合
db.createCollection(name, options)
//name:集合名,字符
//options:可选,为对象

//2.删除集合
db.colName.drop()
//3.查看所有集合
show collections
//4.查看当前集合名称
db.getCollectionNames()
  1. 数据的操作
// 1. 增
插入单条:db.colName.insert({})
插入多条:db.colName.insert([{},{},...])
插入单条:db.colName.insertOne({})
插入多条:db.colName.insertMany([{},{},]) *

//2.删
根据指定的键值对条件:
删除单条数据:db.colName.deleteOne({
  key:val})
删除多条数据:db.colName.deleteMany({
  key:val})
删除所有数据:db.colName.deleteMany({})

//3.改
根据指定的键值对条件:
修改单条数据:db.colName.updateOne({
  key:val},{$set:{key1:newVal,key2:newVal}})
修改多条数据:db.colName.updateMany({
  key:val},{$set:{key1:newVal,key2:newVal}})
Num为正自增,为负自减
自增/自减单条数据:db.colName.updateOne({
  key:val},{$inc:{key1:num}})
自增/自减多条数据:db.colName.updateMany({
  key:val},{$inc:{key1:num}})
  1. 数据的操作----查
//1.基本查询所有数据:
db.colName.find()

//2.格式化查询所有数据:
db.colName.find().pretty()

//3.指定键值对条件查询:
db.colName.find({
  key:val})

//4.指定条件查询(可以为{}表示所有数据),并限制字段显示:
db.colName.find({
  key:val},{userName:1, pass:1})
inclusion模式,指定返回的键,不返回其他键
db.colName.find({
  key:val},{userName:0, pass:0})
exclusion模式,指定不返回的键,返回其他键
注意:_id默认返回,如果不需要,需主动设置_id:0

//5.分页查询:
db.colName.find({
  key:val}).limit(num).skip(start)
num:表示个数
start:表示起始索引,默认为0

//6.排序查询:
db.colName.find({
  key:val}).sort({
  key:1})
1升序,-1降序

//7.区间查询: - 价格区间
db.colName.find({ key: {$lt:val1, $gt:val2} })
小于val1,大于val2
db.colName.find({ key: {$lte:val1, $gte:val2} })
小于等于val1,大于等于val2

//8.模糊查询: - 搜索
db.colName.find({ key: /val/})
查询key中包含val的数据
db.colName.find({ key: /^val/})

//9.查询key中包含val且以val开头的数据或查询: - 用户名或手机号登录
db.colName.find({ $or: [{key1:val1},{key2:val2}] })

//10.查询key1为val1或key2为val2的数据
且查询:
db.colName.find({ key1:val1, key2:val2 })
	查询key1为val1且key2为val2的数据
	
//11.获取指定字段的数据: - 分类
db.colName.distinct("key")
	获取指定字段的所有数据,去重并以数组的形式返回
    原文作者:小手冰凉的007
    原文地址: https://blog.csdn.net/weixin_48065262/article/details/114103754
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。