nosql
关系型数据库
relational database (关系型数据库),高度组织化结构化的数据,使用结构化的查询语言(sql)。
nosql(非关系型数据库)的优势
高可扩展,分布式计算,成本低,半结构化数据
存储类型
键值存储:redis(内存),memcache(内存)
文档存储:MongoDB
列存储:Hbase
MongoDB
适用场景
网站数据、存储等大尺寸,低价值的数据,在高伸缩性的场景,用于对象和json数据的存储。
慎用场景
1、搜索场景:文档有十几个字段,需要按照任意字段进行搜索和排序
2、ERP、CRM 等复杂应用:关联性支持弱,事务性弱
3、100% 写可用:MongoDB换主节点时候会短暂不可用
存储格式
1、Json
Mongodb使用json文档存储记录
{
name:“sabrina” // field : value
age: "18" // field : value
}
2、Bson
二进制的JSON
有Date和BinData
Mongodb中的document使用Bson存储
我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:
安装
1、官网下载:https://www.mongodb.com/
免费下载
server启动
1、新建data目录:D:\software\MongoDB\data\db
2、使用命令行在MongoDB的bin目录执行语句:
mongod --dbpath D:\software\MongoDB\data\db
3、访问http://localhost:27017/
client访问
1、下载客户端软件Robo:https://robomongo.org/ 免费
2、new conntect:localhost:27017
语法
操作数据库(database) | command |
---|---|
创建数据库 | use dbname |
查看数据库 | show dbs |
删除数据库 | dbname.dropDatabase() |
操作集合(table) | command |
---|---|
创建集合 | db.createCollection(“collName”) |
查看集合 | show collections |
删除集合 | db.collName.drop() |
操作文档 (data) | command |
---|---|
插入文档 | db.col.insert({“title1”:“value1”}) |
查询文档 | db.col.find() |
更新文档 | db.col.update({“title1”:“value1”}, {$set:{‘title’:‘MongoDB’}}) |
存在替换,否则添加文档 | db.col.save({“title1”:“value1”}) |
删除文档 | db.col.remove({“title1”:“value1”}) |
条件查询 | command | RDBMS语句 |
---|---|---|
等于 | db.col.find({“title”: “value”}) | where title = “value” |
小于 | db.col.find({“money” : {$lt:50}}) | where money< 50 |
小于等于 | db.col.find({“money” : {$lte:50}}) | where money<= 50 |
大于 | db.col.find({“money” : {$gt:50}}) | where money> 50 |
大于等于 | db.col.find({“money” : {$gte:50}}) | where money> 50 |
并且 | db.col.find({“key1”: “value1”},{“key2”: “value2”}) | where key1= value1 and key2=value2 |
或者 | db.col.find({$or:[{key1:value1},{key2:value2}]}) | where key1=value1 or key2=value2 |
- greater than 大于
- less than 小于
- equal 等于
其他关键字
其他语法 | command |
---|---|
$type | 检索集合中匹配的数据类型 |
Limit() | 读取制定数量的数据记录 |
skip() | 跳过制定数量的数据记录 |
sort() | 排序 |
createIndex() | 创建索引 |
聚集
对数据进行统计处理,平均数/求和/分组,支持管道(下个操作的输入值为上个操作结果集)。
> db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : 1}}}])
{
"result" : [
{
"_id" : "runoob.com",
"num_tutorial" : 2
},
{
"_id" : "Neo4j",
"num_tutorial" : 1
}
],
"ok" : 1
}
等同于
select by_user, count(*) from mycol group by by_user
表达式 | 描述 |
---|---|
$sum | 计算总和 |
$avg | 计算平均值 |
$min | 获取文档中的最小值 |
$max | 获取文档中的最大值 |
$push | 结果文档中插入一个数组(不去重) |
$addToSet | 在结果文档中插入值到一个数组中,但不创建副本(自动去重) |
$frist | 获取第一个文档 |
$last | 获取最后一个文档 |
- $project:修改输入文档的结构。可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档。
- $match:用于过滤数据,只输出符合条件的文档。
- $limit:用来限制MongoDB聚合管道返回的文档数。
- $skip:在聚合管道中跳过指定数量的文档,并返回余下的文档。
- $unwind:将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值。 $group:将集合中的文档分组,可用于统计结果。
- $sort:将输入文档排序后输出。
- $geoNear:输出接近某一地理位置的有序文档。