MongoDB基础知识学习笔记

15 篇文章 0 订阅
6 篇文章 0 订阅

MongoDB基础

宝塔中的下载和连接

1.在宝塔面板的软件商店安装mongoDB

2.修改mongodb配置

将ip从127.0.0.1更改为0.0.0,并解除IP限制\

授权默认为禁用,如果需要授权验证,则改为启用(冒号后请保留空格) enable

3.宝塔释放端口27017 , 腾讯云服务器,开放端口27017

5.配置用户名和密码

mongo
use admin
db.createUser({user: "root",pwd: "password", roles: [ { role: "root", db: "admin" } ]})

// 进入自己的数据库,创建自己数据库的管理角色
use yourdatabase
db.createUser({user: "user",pwd: "password",roles: [ { role: "dbOwner", db: "yourdatabase" } ]})

验证用户,设置了权限验证之后,如果要查看用户信息,如show users,会显示没有权限,需要进行验证之前你创建的管理角色

// 验证用户必须在admin库中完成
db.auth('root','password')

MongoDB 相关概念

1. 应用场景

使用MongoDB可应对“三高”需求

  1. 社交场景,使用 MongoDB 存储存储用户信息,以及用户发表的朋友圈信息,通过地理位置索引实现附近的人、地点等功能
  2. 游戏场景,使用 MongoDB 存储游戏用户信息,用户的装备、积分等直接以内嵌文档的形式存储,方便查询、高效率存储和访问
  3. 物流场景,使用 MongoDB 存储订单信息,订单状态在运送过程中会不断更新,以 MongoDB 内嵌数组的形式来存储,一次查询就能读取订单所有的变更
  4. 物联网场景,使用 MongoDB 存储所有接入的智能设备信息,以及设备汇报的日志信息,并对这些信息进行多维度的分析
  5. 视频直播,使用 MongoDB 存储用户信息、点赞互动信息等

共同特点:

  1. 数据量大
  2. 写入操作频繁(读写都很频繁)
  3. 价值较低的数据,对事务性要求不高
2. 简介

MongoDB是一个开源、高性能、无模式的文档型数据库

“最像关系型数据库的 NoSQL 数据库”. MongoDB 中的记录是一个文档, 是一个 key-value pair. 字段的数据类型是字符型, 值除了使用基本的一些类型以外, 还包括其它文档, 普通数组以及文档数组

它支持的数据结构非常松散,是一种类似于 JSON 的 格式叫BSON,所以它既可以存储比较复杂的数据类型,又相当的灵活

Bson中,除了基本的JSON类型:string,integer,boolean,double,null,array和object,mongo还使用了特殊的数据类型。这些类型包括date,object id,binary data,regular expression 和code

MongoDB中的记录是一个文档,它是一个由字段和值对(field:value)组成的数据结构。MongoDB文档类似于JSON对象,即一个文档认为就是一个对象

在 MongoDB 中, 数据库和集合都不需要手动创建, 当我们创建文档时, 如果文档所在的集合或者数据库不存在, 则会自动创建数据库或者集合

  • 数据库 (database)
    • 数据库是一个仓库, 存储集合 (collection)
  • 集合 (collection)
    • 类似于数组, 在集合中存放文档
  • 文档 (document)
    • 文档型数据库的最小单位, 通常情况, 我们存储和操作的内容都是文档


SQL术语/概念MondoDB术语/概念解释/说明
databasedatabase数据库
tablecollection数据库表/集合
rowdocument数据记录行/文档
columnfield数据字段/域
indexindex索引
table joins表连接,MongoDB不支持
嵌入文档MongoDB通过嵌入式文档来替代多表连接
primary keyprimary key主键,MongoDB自动将_id字段设置为主键

BSON数据类型参考列表:
数据类型描述举例
字符串UTF-8字符串都可表示为字符串类型的数据{“x” : “foobar”}
对象id对象id是文档的12字节的唯一 ID{“X” :ObjectId() }
布尔值真或者假:true或者false{“x”:true}+
数组值的集合或者列表可以表示成数组{“x” : [“a”, “b”, “c”]}
32位整数类型不可用。JavaScript仅支持64位浮点数,所以32位整数会被自动转换。shell是不支持该类型的,shell中默认会转换成64位浮点数
64位整数不支持这个类型。shell会使用一个特殊的内嵌文档来显示64位整数shell是不支持该类型的,shell中默认会转换成64位浮点数
64位浮点数shell中的数字就是这一种类型{“x”:3.14159,“y”:3}
null表示空值或者未定义的对象{“x”:null}
undefined文档中也可以使用未定义类型{“x”:undefined}
符号shell不支持,shell会将数据库中的符号类型的数据自动转换成字符串
正则表达式文档中可以包含正则表达式,采用JavaScript的正则表达式语法{“x” : /foobar/i}
代码文档中还可以包含JavaScript代码{“x” : function() { /* …… */ }}
二进制数据二进制数据可以由任意字节的串组成,不过shell中无法使用
最大值/最小值BSON包括一个特殊类型,表示可能的最大值。shell中没有这个类型。
3. 特点

MongoDB主要有如下特点:

高性能

索引支持更快的查询,并且可以包含来自嵌入式文档和数组的键。(文本索引解决搜索的需求、TTL索引解决历史数据自动过期的需求、地理位置索引可用于构建各种 O2O 应用)

mmapv1、wiredtiger、mongorocks(rocksdb)、in-memory 等多引擎支持满足各种场景需求

Gridfs解决文件存储的需求

高可用性

MongoDB的复制工具称为副本集(replica set),它可提供自动故障转移和数据冗余

高可扩展性

MongoDB提供了水平可扩展性作为其核心功能的一部分

分片将数据分布在一组集群的机器上。(海量数据存储,服务能力水平扩展)

从3.4开始,MongoDB支持基于片键创建数据区域。在一个平衡的集群中,MongoDB将一个区域所覆盖的读写只定向到该区域内的那些片

丰富的查询支持

MongoDB支持丰富的查询语言,支持读和写操作(CRUD),比如数据聚合、文本搜索和地理空间查询等


MongoDB 常用命令

三个初始数据库
  • admin: 从权限的角度来看,这是"root"数据库。要是将一个用户添加到这个数据库,这个用户自动继承所有数据库的权限。一些特定的服务器端命令也只能从这个数据库运行,比如列出所有的数据库或者关闭服务器。
  • local: 这个数据永远不会被复制,可以用来存储限于本地单台服务器的任意集合
  • config: 当Mongo用于分片设置时,config数据库在内部使用,用于保存分片的相关信息
数据库 (databases) 管理语法
操作语法
查看所有数据库show dbs;show databases;
查看当前数据库db;
切换到某数据库 (若数据库不存在则创建数据库)use <db_name>;
删除当前数据库db.dropDatabase();
集合 (collection) 管理语法
操作语法
查看所有集合show collections;
创建集合db.createCollection("<collection_name>");
删除集合db.<collection_name>.drop()
常用命令小结
命令含义
use articledb选择数据库
db.comment.insert({bson数据})插入
db.comment.find();查询所有
db.comment.find({条件})条件查询
db.comment.findOne({条件})查询符合条件的第一条记录
db.comment.find({条件}).limit(条数)查询符合条件的前几条记录
db.comment.find({条件}).skip(条数)查询符合条件的跳过的记录
db.comment.update({条件},{修改后的数据}) 或db.comment.update({条件},{$set:{要修改部分的字段:数据})修改数据
db.comment.update({条件},{$inc:{自增的字段:步进值}})修改数据并自增某字段值
db.comment.remove({条件})删除数据
db.comment.count({条件})统计查询
db.comment.find({字段名:/正则表达式/})模糊查询
db.comment.find({字段名:{$gt:值}})条件比较运算
db.comment.find({字段名:{值,值或字段名nin:[值1,值2]}})包含查询
db.comment.find({条件条件或or:[{条件1},{条件2}]})条件连接查询
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值