NoSQL数据库一MongoDB基本使用
如今的网站对数据存储要求越来越灵活,在这种需求下 NoSQL 也就是非关系数据库越来越流行。所谓非关系数据库,是指不使用 SQL 语言进行数据操作的数据库的统称。这类数据库存储数据时没有固定的模式,不支持数据表 join 的操作,可以很方便的进行横向扩展。非关系数据库种类很多,其中 MongoDB 和 Redis 应用广泛。
一、MongoDB介绍
MongoDB 是一个是一个基于分布式文件存储的数据库,介于关系数据库和非关系数据库之间,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
二、安装MongoDB
MongoDB安装很简单,无需下载源文件,可以直接用apt-get命令进行安装。
打开终端,输入以下命令:sudo apt-get install mongodb
安装完成后,在终端输入以下命令查看MongoDB版本:mongo -version
输出版本信息,表明安装成功
启动和关闭mongodb命令如下:
service mongodb start
service mongodb stop
默认设置MongoDB是随Ubuntu启动自动启动的。
输入以下命令查看是否启动成功:pgrep mongo -l #注意:-l是英文字母l,不是阿拉伯数字1
卸载MongoDBsudo apt-get --purge remove mongodb mongodb-clients mongodb-server
三、使用MongoDB
shell命令模式
输入mongo进入shell命令模式,默认连接的数据库是test数据库,在此之前一定要确保你已经启动了MongoDB,否则会出现错误,启动之后运行成功,如下截图: 
MongoDB 存储的文档记录是一个 BSON 对象,类似于 JSON 对象,由键值对组成。比如一条用户记录:
{
name: "Aiden",
age: 30,
email: "luojin@simplecloud.cn"
}
每一个文档都有一个 id 字段,该字段是主键,用于唯一的确定一条记录。如果往 MongoDB 中插入数据时没有指定 id 字段,那么会自动产生一个 id 字段,该字段的类型是 ObjectId,长度是 12 个字节。在 MongoDB 文档的字段支持字符串,数字,时间戳等类型。一个文档最大可以达到 16M, 可以存储相当多的数据。
常用操作命令:
数据库相关
- show dbs:显示数据库列表
- show collections:显示当前数据库中的集合(类似关系数据库中的表table)
- show users:显示所有用户
- use yourDB:切换当前数据库至yourDB
- db.help() :显示数据库操作命令
- db.yourCollection.help() :显示集合操作命令,yourCollection是集合名
先尝试往 MongoDB 中插入一条数据:
$ mongo
> use shiyanlou
> db.user.insertOne({name: "Aiden", age: 30, email: "luojin@simplecloud.cn", addr: ["CD", "SH"]})
{
"acknowledged" : true,
"insertedId" : ObjectId("59a8034064e0acb13483d512")
}
> show databases;
admin 0.000GB
local 0.000GB
shiyanlou 0.000GB
> show collections;
user
可以看到,在插入数据前使用 use 指令,切换到了 shiyanlou 数据库,尽管该数据库暂时不存在,但当我们插入数据后,该数据库就被自动创建了。show databases 和 show collection 分别显示了当前存在的数据库和当前数据库的所有文档集合。而且数据插入后,自动添加了 id 字段。插入多条数据,可以使用 db.collection.insertMany 方法:
> db.user.insertMany([
... {name: "lxttx", age: 28, email: "lxttx@simplecloud.cn", addr: ["BJ", "CD"]},
... {name: "jin", age: 31, email: "jin@simplecloud.cn", addr: ["GZ", "SZ"]},
... {name: "nan", age: 26, email: "nan@simplecloud.cn", addr: ["NJ", "AH"]}
... ])
{
"acknowledged" : true,
"insertedIds" : [
ObjectId("59a8034564e0acb13483d513"),
ObjectId("59a8034564e0acb13483d514"),
ObjectId("59a8034564e0acb13483d515")
]
}
添加的数据其结构是松散的,只要是bson格式均可,列属性均不固定,根据添加的数据为准。先定义数据再插入,就可以一次性插入多条数据,运行完以上例子,库自动创建,这也说明 MongoDB 不需要预先定义 collection ,在第一次插入数据后,collection 会自动的创建。
查询数据可以使用 db.collection.find 方法,可以指定查询过滤条件:
> db.user.find()
{ "_id" : ObjectId("59a8034064e0acb13483d512"), "name" : "Aiden", "age" : 30, "email" : "luojin@simplecloud.cn", "addr" : [ "CD", "SH" ] }
{ "_id" : ObjectId("59a8034564e0acb13483d513"), "name" : "lxttx", "age" : 28, "email" : "lxttx@simplecloud.cn", "addr" : [ "BJ", "CD" ] }
{ "_id" : ObjectId("59a8034564e0acb13483d514"), "name" : "jin", "age" : 31, "email" : "jin@simplecloud.cn", "addr" : [ "GZ", "SZ" ] }
{ "_id" : ObjectId("59a8034564e0acb13483d515"), "name" : "nan", "age" : 26, "email" : "nan@simplecloud.cn", "addr" : [ "NJ", "AH" ] }
> db.user.find({name: "jin"})
{ "_id" : ObjectId("59a8034564e0acb13483d514"), "name" : "jin", "age" : 31, "email" : "jin@simplecloud.cn", "addr" : [ "GZ", "SZ" ] }
> db.user.find({age: {$gt: 30}})
{ "_id" : ObjectId("59a8034564e0acb13483d514"), "name" : "jin", "age" : 31, "email" : "jin@simplecloud.cn", "addr" : [ "GZ", "SZ" ] }
> db.user.find({addr: "CD"})
{ "_id" : ObjectId("59a8034064e0acb13483d512"), "name" : "Aiden", "age" : 30, "email" : "luojin@simplecloud.cn", "addr" : [ "CD", "SH" ] }
{ "_id" : ObjectId("59a8034564e0acb13483d513"), "name" : "lxttx", "age" : 28, "email" : "lxttx@simplecloud.cn", "addr" : [ "BJ", "CD" ] }
上面例子中,我们先通过 db.user.find() 获取到了之前插入的全部数据。接着使用不同的过滤条件进行了查询,其中有一些查询如 {age: {$gt: 30}} 表示查询年龄大于 30 的用户。还可以发现查询数组中是否存在某一元素也非常方便,上面的例子中查询出了所有地址含有 CD 用户。
MongoDB 的查询功能非常强大,可以组合各种查询条件,更多的使用方法可以学习实验楼的其他课程。更新数据主要通过 db.user.updateOne 或者 db.user.updateMany 方法,前者更新一条记录,后者更新多条记录:
> db.user.updateOne(
... {name: "Aiden"},
... {$set: {age: 29, addr: ["CD", "SH", "BJ"]}}
... )
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
> db.user.find({name: "Aiden"})
{ "_id" : ObjectId("59a8034064e0acb13483d512"), "name" : "Aiden", "age" : 29, "email" : "luojin@simplecloud.cn", "addr" : [ "CD", "SH", "BJ" ] }
可以看到成功的更新了一条记录。删除数据也非常简单,可以通过 db.user.deleteMany 或db.user.deleteOne 方法:
> db.user.deleteMany({addr: "CD"})
{ "acknowledged" : true, "deletedCount" : 2 }
> db.user.find()
{ "_id" : ObjectId("59a8034564e0acb13483d514"), "user" : "jin", "age" : 31, "email" : "jin@simplecloud.cn", "addr" : [ "GZ", "SZ" ] }
{ "_id" : ObjectId("59a8034564e0acb13483d515"), "user" : "nan", "age" : 26, "email" : "nan@simplecloud.cn", "addr" : [ "NJ", "AH" ] }
上面的命令成功的删除所有地址包含 "CD" 的用户,共删除了两条记录。
NoSQL数据库一MongoDB基本使用的更多相关文章
- NoSql数据库初探-mongoDB环境搭建
NoSQL数据库一改关系型数据库的缺点,更容易的集成.分布式.无模式.故障恢复等特点,正在一步步餐食关系型数据库的市场,作为一个与时俱进的码农了解一下新技术是必须的,尤其是在读了<NoSql精粹 ...
- 第12章—使用NoSQL数据库—使用MongoDB+Jpa操作数据库
使用MongoDB+Jpa操作数据库 SpringData还提供了对多种NoSQL数据库的支持,包括MongoDB;neo4j和redis.他不仅支持自动化的repository,还支持基于模板的数据 ...
- NoSQL 数据库之MongoDB
1.MongoDB简介 1.1什么是MongoDB MongoDB 是一个跨平台的,面向文档的数据库,是当前 NoSQL 数据库产品中最热门的一种.它介于关系数据库和非关系数据库之间,是非关系数据库当 ...
- NOSQL数据库之MongoDB
一.NoSQL概述 如今,大多数的计算机系统(包括服务器.PC.移动设备等)都会产生庞大的数据量.其实,早在2012年的时候,全世界每天产生的数据量就达到了2.5EB(艾字节,).这些数据有很大一部 ...
- NoSql数据库初探-mongoDB读操作
MongoDB以文档的形式来存储数据,此结果类似于JSON键值对.文档类似于编程语言中将键和值关联起来的结构(比如:字典.Map.哈希表.关联数组).MongoDB文档是以BOSN文档的形式存在的.B ...
- nosql数据库:mongodb,redis,memcached,其优缺点和使用应用场景
1.mongodb (1)是文档型的非关系型数据库,使用bson结构.其优势在于查询功能比较强大,能存储海量数据,缺点是比较消耗内存. (2)一般可以用来存放评论等半结构化数据,支持二级索引. 适合存 ...
- HBase、Redis、MongoDB、Couchbase、LevelDB主流 NoSQL 数据库的对比
最近小组准备启动一个 node 开源项目,从前端亲和力.大数据下的IO性能.可扩展性几点入手挑选了 NoSql 数据库,但具体使用哪一款产品还需要做一次选型. 我们最终把选项范围缩窄在 HBase.R ...
- SequoiaDB创始人:比MongoDB领先一到两年 打造企业级NoSQL数据库
CSDN.NET 这几年来, NoSQL数据库凭借其易扩展.高性能.高可用.数据模型灵活等特色吸引到了大量新兴互联网公司的青睐,包括国内的淘宝.新浪.京东商城.360.搜狗等都已经在局部尝试NoS ...
- 28个MongoDB NoSQL数据库的面试问答
MongoDB是目前最好的面向文档的免费开源NoSQL数据库.如果你正准备参加MongoDB NoSQL数据库的技术面试,你最好看看下面的MongoDB NoSQL面试问答.这些MongoDB NoS ...
随机推荐
- P/NP问题
目录 P NP NPC NPH 写在开头 1.多项式 如公式:y = axn-bxn-1+c.Ο(log2n).Ο(n). Ο(nlog2n).Ο(n2)和Ο(n3)称为多项式时间.Ο(2n)和Ο(n ...
- python3 调用 beautifulSoup 进行简单的网页处理
python3 调用 beautifulSoup 进行简单的网页处理 from bs4 import BeautifulSoup file = open('index.html','r',encodi ...
- 通俗易懂的Redis数据结构基础教程
Redis有5个基本数据结构,string.list.hash.set和zset.它们是日常开发中使用频率非常高应用最为广泛的数据结构,把这5个数据结构都吃透了,你就掌握了Redis应用知识的一半了. ...
- 更换镜像加快python pip 安装扩展库的速度
一些镜像源: 清华大学 https://pypi.tuna.tsinghua.edu.cn/simple/ 阿里云 http://mirrors.aliyun.com/pypi/simple/ 中国科 ...
- 咏南中间件新增MORMOT插件功能
咏南中间件新增MORMOT插件功能 咏南中间件支持DATASNAP和MORMOT两种通讯框架. 原来已经支持DATASNAP插件,现在又增加了MORMOT插件,已经支持DATASNAP和MORMOT两 ...
- Restful API 架构与设计参考原则
1. 什么是RESTREST全称是Representational State Transfer,中文意思是表述(编者注:通常译为表征)性状态转移. 它首次出现在2000年Roy Fielding的博 ...
- error storage size of my_addr isn't known
- Oracle 中的 Profile
一.目的: Oracle系统中的profile可以用来对用户所能使用的数据库资源进行限制,使用Create Profile命令创建一个Profile,用它来实现对数据库资源的限制使用,如果把该prof ...
- JDK&JRE
JDK是提供给Java开发人员使用的,其中包含了java的开发工具,也包括了JRE.所以安装了JDK,就不用在单独安装JRE了. 其中的开发工具:编译工具(javac.exe) 打包工具(jar.ex ...
- 机器学习 - 算法 - SVM 支持向量机
SVM 原理引入 支持向量机( SVM,Support Vector Machine ) 背景 2012年前较为火热, 但是在12年后被神经网络逼宫, 由于应用场景以及应用算法的不同, SVM还是需要 ...