MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。
在高负载的情况下,添加更多的节点,可以保证服务器性能。
MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。
不同与关系型数据库的是, MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。
MoginDB 是一个面向文档存储的数据库, 操作起来比较简单和容易
你可以在MongoDB记录中设置任何属性的索引(如: FirstName-"Sameer"
,Address =8 Gandi Road"
) 来实现更快的查询
你可以通过本地或网络创建数据镜像, 这是的MongoDB有更强的扩展性
Mongo支持丰富的查询表达式, 查询指令使用JSON
形式的标记, 可轻易查询文档中内嵌的对象及数组
MongoFB中的Map/reduce
主要是用来对数据进行批量处理和聚合操作
* Map
和Reduce
. Map函数调用emit ( key, value )
遍历集合中所有的记录,将 key
与 value
传给 Reduce
函数进行处理
Map
函数和Reduce
函数是使用JavaScript
编写的, 并且可以通过db.runCommand
或mapreduce
命令来执行mapReduce
操作
MongoDB允许在服务端执行脚本, 可以用 JavaScript 编写某个函数, 直接服务端执行, 也可以把函数的定义存储在服务端, 下次直接调用即可
MongoDB支持各种变成语言:RUBY
,PYTHON
,JAVA
,PHP
,C#
等多种语言
MongoDB安装简单
非关系性数据库(No SQL), 属于文档型数据库
MongoDB的优点
BSON
和JSON
格式的数据十分适合文档格式的存储与查询MongoDB的缺点
如果需要将mongodb作为后端db来代替mysql使用,即这里mysql与mongodb 属于平行级别,那么,这样的使用可能有以下几种情况的考量:
(1) mongodb所负责部分以文档形式存储
,能够有较好的代码亲和性,json格式的直接写入方便。(如日志之类)
(2)从datamodels
设计阶段就将原子性
考虑于其中,无需事务之类的辅助。开发用如nodejs之类的语言来进行开发,对开发比较方便。
(3)mongodb本身的failover机制
,无需使用如MHA之类的方式实现。
将mongodb作为类似redis
,memcache
来做缓存db,为mysql提供服务,或是后端日志收集分析。 考虑到mongodb属于No SQL型数据库,sql语句与数据结构不如mysql那么亲和 ,也会有很多时候将mongodb做为辅助mysql而使用的类redis memcache 之类的缓存db来使用。 亦或是仅作日志收集分析。
SQL术语/概念
MoingoDB术语/概念
解释/说明
database
database
数据库
table
collection
数据库表/集合
row
document
数据记录行/文档
column
field
数据字段/域
index
index
索引
table joins
表连接, MongoDB不支持
primary key
primary key
主键, MongoDB自动将 _id
字段设置为主键
当我们在创建文档时, 如果文档所在的集合或数据库不存在, 则会自动创建数据库和集合
语法:
use DATABASE_NAME
如果使用的数据库不存在, 则创建数据库, 否则切换到指定数据库
db
: 代表的是当前所使用的数据库
语法:
show dbs
MongoDB 中默认的数据库为 test,如果你没有创建新的数据库,集合将存放在 test 数据库中。
**注意**: 在 MongoDB 中,集合只有在内容插入后才会创建! 就是说,创建集合(数据表)后要再插入一个文档(记录),集合才会真正创建。
语法:
db.dropDatabase()
MongoDB 中使用 createCollection()
方法来创建集合
语法:
db.createCollection(<name>, options)
参数说明:
capped <Boolean>
: (可选)如果为 true,则创建固定集合。固定集合是指有着固定大小的集合,当达到最大值时,它会自动覆盖最早的文档。
当该值为 true 时,必须指定 size 参数。
size <Number>
: (可选)为固定集合指定一个最大值,即字节数。如果 capped 为 true,也需要指定该字段。
max <Number>
: (可选)指定固定集合中包含文档的最大数量。
**注意**: 在插入文档时,MongoDB 首先检查固定集合的 size 字段,然后检查 max 字段。
实例:
在 test 数据库中创建 runoob 集合
语法:
show collections
或者
show tables
语法
db.collection.drop()
返回值
文档的数据结构和 JSON 基本一样。
所有存储在集合中的数据都是 BSON 格式。
BSON 是一种类似 JSON 的二进制形式的存储格式,是 Binary JSON 的简称。
_id
属性, 则数据库会自动为文档添加 _id
_id
属性不会重复, 自动通过时间戳 + 机器码生成_id
属性可以自己指定, 如果已经手动指定了, 则不会再自动生成, 需要确保唯一性语法:
使用 insert()
或 save()
方法向集合中插入文档
insert()
: 若插入的数据主键已经存在,则会抛异常,提示主键重复,不保存当前数据。
save()
:如果 _id 主键存在则更新数据,如果不存在就插入数据。该方法新版本中已废弃
db.COLLECTION_NAME.insert(
或
db.COLLECTION_NAME.save(
这里用 insert()
方法作为演示
向 test
数据库中的 , stus
集合中插入一个新的学生对象
3.2 版本后新增方法 db.<collection>.insertOne()
和 db.collection.insertMany()
语法:
db.<collection>.insertOne(
<document>,
{
writeConcern: <document>
}
)
db.<collection>.insertMany(
[ <document 1> , <document 2>, ... ],
{
writeConcern: <document>,
ordered: <boolean>
}
)
参数说明:
document
: 要写入的文档writeConcern
: 写入策略, 默认为1, 即要求确认写操作, 0 是不要求ordered
: 指定是否按顺序写入, 默认是 true
,按顺序写入**注意**:insertOne()需要传入的是一个JSON对象, 而insertMany()则是一个包着JSON对象的数组
语法:
db.<collection>.find()
find()
用来查询集合中所有符合条件的文档
find()
可以接受一对象作为条件参数, 不传则表示所有文档
在 find()
方法后 .pretty()
可将返回的数据格式化
find()
方法返回的是一个数组
操作
格式
范例
mysql中类似语句
等于
{<key>:<value>}
db.col.find( {"by":"菜鸟教程"} ).pretty()
where by = '菜鸟教程
小于
{<key>:{$lt:<value>}}
db.col.find( {"linkes":{$lt:50} } ).pretty()
where likes < 50
小于或等于
{<key>:{$lte:<value>}}
db.col.find( {"linkes":{$lte:50} } ).pretty()
where likes <= 50
大于
{<key>:{$gt:<value>}}
db.col.find( {"linkes":{$gt:50} } ).pretty()
where likes > 50
大于或等于
{<key>:{$gte:<value>}}
db.col.find( {"linkes":{$gte:50} } ).pretty()
where likes >= 50
不等于
{<key>:{$ne:<value>}}
db.col.find( {"linkes":{$ne:50} } ).pretty()
where likes != 50
MongoDB的 find()
方法可以传入多个键(key), 每个键(key)以逗号隔开, 即常规SQL 的 AND 条件
语法:
db.<collection>.find({<key1>:<value1>},{<key2>:<value2>})
示例: 查询数据中所有 age < 38 AND gender = "女"
的数据
db.stus.find({"age":{$lt:38},"gender":"女"})
MongoDB OR 条件语句使用了关键字 $or
, 语法格式如下:
语法:
db.<collection>.find( {$or:[ {<key1>:<value1>} , {<key2><value2>} ]} )
示例: 查询 age = 38 OR name = 沙和尚
的数据
db.stus.find({$or:[{"age":38},{"name":"沙和尚"}]})
手机扫一扫
移动阅读更方便
你可能感兴趣的文章