MongoDB基本操作

MongoDB简介

MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。

MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它文持的数据结构非常松散,是类似ison的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

所谓“面向集合”(Collection-Oriented),意思是数据被分组存储在数据集中,被称为一个集合(Collection)。每个集合在数据库中都有一个唯一的标识名,并且可以包含无限数目的文档。集合的概念类似关系型数据库(RDBMS)里的表(table),不同的是它不需要定义任何模式(schema)。Nytro MegaRAID技术中的闪存高速缓存算法,能够快速识别数据库内大数据集中的热数据,提供一致的性能改进。

模式自由(schema-free),意味着对于存储在mongodb数据库中的文件,我们不需要知道它的任何结构定义。如果需要的话,你完全可以把不同结构的文件存储在同一个数据库里。

存储在集合中的文档,被存储为键-值对的形式。键用于唯一标识一个文档,为字符串类型,而值则可以是各种复杂的文件类型。我们称这种存储形式为BSON(BinarySerialized Document Format)。

MongoDB已经在多个站点部署,其主要场景如下:

1)网站实时数据处理。它非常适合实时的插入、更新与查询,并具备网站实时数据存储所需的复制及高度伸缩性。

2)缓存。由于性能很高,它适合作为信息基础设施的缓存层。在系统重启之后,由它搭建的持久化缓存层可以避免下层的数据源过载。

3)高伸缩性的场景。非常适合由数十或数百台服务器组成的数据库,它的路线图中已经包含对MapReduce引擎的内置支。

不适用的场景如下:
1)要求高度事务性的系统。
2)传统的商业智能应用。
3)复杂的跨文档(表)级联查询。

MongoDB特点:

1.MongoDB 是一个面向文档存储的数据库,操作起来比较简单和容易。

2.Mongo支持丰富的查询表达式。查询指令使用JSON形式的标记,可轻易査询文档中内嵌的对象及数组。

3.MongoDb 使用update()命令可以实现替换完成的文档(数据)或者一些指定的数据字段。

4.Mongodb中Map/reduce主要是用来对数据进行批量处理和聚合操作。

5.Map和Reduce。Map函数调用emit(key,value)遍历集合中所有的记录,将key与value传给Reduce函数进行处理。


6.Map函数和Reduce函数是使用Javascript编写的,并可以通过db.runCommand或mapreduce命令来执行MapReduce操作。


7.GridFS是MongoDB中的一个内置功能,可以用于存放大量小文件。8.MongoDB允许在服务端执行脚本,可以用Javascript编写某个函数,直接在服务端执行,也可以把函数的定义存储在服端,下次直接调用即可。

8、自动分片。自动分片功能支持水平的数据库集群,可动态添加机器。分片的功能实现海量数据的分布式存。

9、支持多种语言。支持 C++、 C#、 Erlang、Haskell、JavaScript、Java、Perl、PHP、Python、Ruby、Scala 等开发语言。

 10、mongodb使用的是内存映射存储引擎。mongodb会把磁盘 IO 操作转换成内存操作,如果是读操作,内存中的数据起到缓存的作用;如果是写操作,内存还可以把随机的写操作转换成顺序的写操作,总之可以大幅度提升性能。这也是mongodb快的原因。坏处是没有办法很方便地控制 mongodb占多大内存,mongodb会占用所有能用的内存,所以最好不要把别的服务和mongodb放在同一台服务器部署。

MongoDB        数据库操作

新建数据库:
use DATABASE_NAME

use:用于切换/创建数据库,若不存在则创建,否则切换到指定数据库

DATABASE_NAME:数据库名称

执行use articledb命令,创建数据库articledb

查看数据库:
show dbs

或者查看当前数据库,需要先切换到指定数据库

db
删除数据库:
db.dropDatabase()
创建集合:

        显示创建:

db.createCollection(COLLECTION_NAME, [OPTIONS])
db.COLLECTION_NAME.insertMany([document1,document2,...])
db.COLLECTION_NAME.insert(DOCUMENT)
删除集合:
db.COLLECTION_NAME.drop()
文档插入:
db.COLLECTION_NAME.insert(document)

        或

db.COLLECTION_NAME.save(document)
多文档插入:
db.COLLECTION_NAME.insertMany([document1,document2,...])
文档更新:
db.COLLECTION_NAME.update(criteria,objNew,upsert, multi)
升级语法:
db.集合名.update(条件, 新数据){修改器: {键:值}}
修改器作用
$inc递增
$rename重命名列
$set修改列值
$unset删除列
文档删除:

        单个:

db.COLLECTION_NAME.remove(
<query>,
{
justOne: <boolean>,
writeConcern: <document>
}
)

删除全部:

db.COLLECTION_NAME.remove({})
文档查询:

        查询全部文档:

db.COLLECTION_NAME.find()

        查询所有文档,以易读方式展示:

db.COLLECTION_NAME.find().pretty()

按条件查询文档:

        基础语法:

查询所有数据 {}或者不写
查询age=6的数据 {age:6}
既要age=6又要性别=男 {age:6,sex:'男'}
查询的列(可选参数
不写 - 这查询全部列(字段
{age:1} 只显示age列(字段
{age:0} 除了age列(字段都显示
留心:不管你怎么写系统自定义的_id都会在
聚合操作:

聚合管道操作是将文档在一个管道处理完毕后,把处理的结果传递给下一个管道进行再次处理。聚合管 道是使用不同的管道阶段操作器进行不同聚合操作,管道阶段操作器也可称为管道操作符,常见管道操 作符如下表:

常见管道操作符相关说明
$group将集合中的文档进行分组,便于后续统计结果
$limit用于限制MongoDB聚合管道返回的文档数
$match用于过滤数据,只输出符合条件的文档
$sort将输入的文档先进行排序,再输出
$project用于修改输入文档的结构(增加、删除字段等)和名称
$skip在聚合管道中跳过指定数量的文档,并返回剩余的文档
操作:
db.集合名称.aggregate([
{管道:{表达式}}
....
])

索引:

简单索引:

MongoDB支持在文档的单个字段上创建用户定义的升序/降序索引,因此被称为单字段索引(Single Field Index)。默认情况下,MongoDB中所有集合在“_id”字段上都有一个索引,用户也可以根据自己 的需求添加额外索引来支持重要的查询和操作。由于MongoDB可以从任何方向遍历索引,因此对于单 个字段索引和排序操作来说,索引项的排序顺序(即升序或降序)并不重要。

复合索引:

MongoDB除了支持单字段索引外,还支持复合索引。所谓复合索引,就是包含多个字段的索引,一个 复合索引最多可以包含31个字段。需要注意的是,若某字段属于哈希索引,则这时复合索引就不能包括 该字段。

多键索引:

若文档中的字段为数组类型,则每个字段都是数组中的一个元素,MongoDB将会为数组中的每个元素 创建索引,因此被称为多键索引(Multikey Index)。多键索引允许通过匹配数组的一个或多个元素来 查询包含该数组的文档。如果索引字段包含数组值,则MongoDB会自动确定是否创建多键索引,而无 需显式地指定创建多键索引。

查看索引:
db.COLLECTION_NAME.getIndexes()
查看索引大小:
db.COLLECTION_NAME.totalIndexSize()
创建索引:
db.COLLECTION_NAME.createIndex(keys,options)
删除索引:
db.COLLECTION_NAME.dropIndexes()
删除单个:
db.COLLECTION_NAME.dropIndex(index)
  • 6
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值