Mongodb简介

什么是MongoDB

MongoDB是由C++语言编写,是一个基于分布式文件存储的开源数据库系统;高负载下,添加更多的节点,可以保证服务器性能

MongoDB为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB将数据存储为一个文档,数据结构由键值对组成;MongoDB文档类似于JSON对象;字段值可以包含其它文档,数组及文档数组

特点

MongoDB提供了一个面向文档存储,操作起来比较简单和容易

可以通过本地或者网络创建数据镜像,具有很强的扩展性

可以在记录中创建索引

支持丰富的查询表达式,查询指令使用JSON形式的标记,可以轻易查询文档中的对象及数组

如果需负载增加--存储或者计算能力,可以分布在其它节点

使用update()可以实现替换完整的文档数据或者一些指定数据字段

Map/reduce主要用来对数据进行批量处理和聚合操作

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

map函数和reduce函数时使用javascript编写,可以通过db.runCommand或者mapreduce命令来执行mapreduce操作

GridFS是MongoDB中的一个内置功能,可以用于存放大量小文件

可以编写服务端执行脚本,用jaascript编写某个函数,直接在服务端执行,也可以把函数定义存储在服务端,下次直接调用

支持各种编程语言

概念比较

SQL术语/概念

MongoDB术语/概念

解释

database

database

数据库

table

collection

数据库表/集合

row

document

数据记录行/文档

column

field

数据字段/

index

index

索引

table joins

 

表连接,MongoDB不支持

primary key

primary key

主键,MongoDB自动将_id字段设置为主键

数据库

一个mongodb可以建立多个数据库;mongodb的默认数据库为‘db’,该数据库存储在data目录中

mongodb的单个实力可以容纳多个独立的数据库,每一个都有自己的集合和权限,不同数据库也放在不同的文件中,

使用show dbs 命令显示所有数据库

> show dbs
admin  0.000GB
local  0.000GB
test   0.000GB
执行db显示当前的数据库对象或集合

> db
test
使用use可以连接到指定的数据库,如果没有则创建之

> use local
switched to db local
> db
local
上边显示的数据库说明

admin:属于root数据库,如果一个用户添加到这个数据库,这个用户会自动继承所有数据库的权限。一些特定的服务端命令也只能在这个数据库unxing,比如列出所有数据库、关闭服务器

local:这个数据库不会被复制,可以用来存储仅限于本地单台服务器的 任意集合

config:当Mongo用于分片设置时,他用于数据库内部使用,来保存分片的相关信息

另外使用use db1创建数据库后,使用show dbs 显示数据库时候将默认不显示,需要插入一些内容

> use db1
switched to db db1
> db.c1.insert({"name":"china"})
WriteResult({ "nInserted" : 1 })
> show dbs;
admin  0.000GB
db1    0.000GB
local  0.000GB

删除数据库

> db.dropDatabase()
{ "dropped" : "db1", "ok" : 1 }

集合

集合就是MongoDB文档组,类似于RDBMS中的表格;集合存在于数据库中,没有固定的结构

当第一个文档插入到集合中时候,集合就被创建

> db.c2.insert({"name":"china"})
WriteResult({ "nInserted" : 1 })

查看集合

> show tables;
c1
c2

比如查看集合col的第一条记录

> db.c2.findOne()
{ "_id" : ObjectId("5958e3b2a6e810ff1933a6de"), "name" : "china" }

删除集合

> db.c2.drop()
true
> show tables;
c1


capped collections

他是固定大小的collection;具有很高的性能以及队列过期特性--过期按照插入的顺序;是高性能自动维护对象的插入顺序;非常适合记录日志的功能

和标准的collection不同,你必须要显式的创建一个capped collection,指定一个collection的大小,单位是字节。collection的数据存储空间值提前分配的

db.createCollection("mycol", {capped:true, size:100000})

文档

相当于行记录,文档时一组键值对-BSON,MongoDB的文档不需要设置相同的字段,并且相同的字段不需要相同的数据类型,这与关系型数据库有很大区别

文档的数据结构和JSON基本一样;所有存储在集合中的数据都是BSON格式;BSON是一种类json的一种二进制形式的存储格式,简称Binary JSON

一个文档例子

{"name":"jack","age":30}

一个插入集合中文档的例子,如果插入的集合不存在,自动创建,另外也可以定义文档变量插入

> db.c3.insert({name:'china',
... desc:'zhongguo'});
WriteResult({ "nInserted" : 1 })
> doc1=({name1:'usa',
... desc:'meiguo'});
{ "name1" : "usa", "desc" : "meiguo" }
> db.c3.insert(doc3)
2017-07-02T20:30:33.397+0800 E QUERY    [thread1] ReferenceError: doc3 is not de
fined :
@(shell):1:1
> db.c3.insert(doc1)
WriteResult({ "nInserted" : 1 })
> db.c3.find()
{ "_id" : ObjectId("5958e72ea6e810ff1933a6df"), "name" : "china", "desc" : "zhon
gguo" }
{ "_id" : ObjectId("5958e76fa6e810ff1933a6e0"), "name1" : "usa", "desc" : "meigu
o" }

更新文档,如果是更新所有文档,添加multi:true条件

> db.c3.update({'name':'china'},{$set:{'title':'zhongg'}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.c3.update({'name':'china'},{$set:{'title':'zhongg'}},{multi:true})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 0 })
替换文档

> db.c3.find()
{ "_id" : ObjectId("5958e72ea6e810ff1933a6df"), "name" : "china", "desc" : "zhon
gguo", "title" : "zhongg" }
{ "_id" : ObjectId("5958e76fa6e810ff1933a6e0"), "name1" : "usa", "desc" : "meigu
o" }
> db.c3.save({"_id" : ObjectId("5958e72ea6e810ff1933a6df"),'name':'aaa'})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.c3.find()
{ "_id" : ObjectId("5958e72ea6e810ff1933a6df"), "name" : "aaa" }
{ "_id" : ObjectId("5958e76fa6e810ff1933a6e0"), "name1" : "usa", "desc" : "meigu
o" }

删除文档,其中后边的1代表删除找到文档第一条,否则删除所有匹配文档

> db.c3.remove({'name':'aaa'},1)
WriteResult({ "nRemoved" : 1 })
> db.c3.find()
{ "_id" : ObjectId("5958e76fa6e810ff1933a6e0"), "name1" : "usa", "desc" : "meigu
o" }
删除所有文档
> db.c3.remove({})
WriteResult({ "nRemoved" : 1 })
> db.c3.find()

RDBMS和MongoDB服务客户端对照

数据库服务和客户端

Mysqld/Oracle

mongod

mysql/sqlplus

mongo


注意:

文档中的键值对是有序的

文档中的值不仅可以是在双引号里面的字符串,还可以是其他几种数据类型(甚至可以是整个嵌入的文档)

MongoDB区分类型,大小写

文档不能有重复的键


元数据

数据库的信息是存储在集合中。使用了系统的命名空间

dbname.system.*
MongoDB数据类型那个列表,常用

数据类型

描述

String

字符串。存储数据常用的数据类型。在 MongoDB 中,UTF-8 编码的字符串才是合法的。

Integer

整型数值。用于存储数值。根据你所采用的服务器,可分为 32 位或 64 位。

Boolean

布尔值。用于存储布尔值(真/假)。

Double

双精度浮点值。用于存储浮点值。

Min/Max keys

将一个值与 BSON(二进制的 JSON)元素的最低值和最高值相对比。

Arrays

用于将数组或列表或多个值存储为一个键。

Timestamp

时间戳。记录文档修改或添加的具体时间。

Object

用于内嵌文档。

Null

用于创建空值。

Symbol

符号。该数据类型基本上等同于字符串类型,但不同的是,它一般用于采用特殊符号类型的语言。

Date

日期时间。用 UNIX 时间格式来存储当前日期或时间。你可以指定自己的日期时间:创建 Date 对象,传入年月日信息。

Object ID

对象 ID。用于创建文档的 ID。

Binary Data

二进制数据。用于存储二进制数据。

Code

代码类型。用于在文档中存储 JavaScript 代码。

Regular expression

正则表达式类型。用于存储正则表达式。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

朝闻道-夕死可矣

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值