微服务流行,我也是愈来愈喜欢MongoDB了,除非必要要用MySQL,我都会倾向于MongoDB。sql
MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。数据库
在高负载的状况下,添加更多的节点,能够保证服务器性能。编程
MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。数组
MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档相似于 JSON 对象。字段值能够包含其余文档,数组及文档数组。bash
因为MongoDB独特的数据处理方式,能够将热点数据加载到内存,故而对查询来说,会很是快(固然也会很是消耗内存);同时因为采用了BSON的方式存储数据,故而对JSON格式数据具备很是好的支持性以及友好的表结构修改性,文档式的存储方式,数据友好可见;数据库的分片集群负载具备很是好的扩展性以及很是不错的自动故障转移(大赞)。服务器
不足:数据库的查询采用了特有的查询方式,有必定的学习成本(不高);索引不咋滴;锁只能提供到collection级别,还作不到行级锁;没有事务机制(不能回滚啊);学习资料确定没有MySQL的多。网络
MongoDB侧重于对数据进行操做的应用系统,而Hadoop则侧重于对数据进行分析统计的应用。数据结构
MongoDB可以知足对数据库读写性能具备极高要求的应用场景(很消耗memory的),通常这些应用的响应延迟会要求控制在10ms如下,甚至更低。而Hadoop因为每一次的读写操做会包含大量数据(Hadoop更适合少次操做大批量数据的场景),经过汇集分析处理大量数据,这种分析通常都会走MapReduce,会形成很高的延迟(数分钟到数小时不等)框架
db.collection.find(query, projection).pretty()
复制代码
collection:文档名称,或者可写成 getCollection('col_name')
编程语言
query :可选,使用查询操做符指定查询条件
projection:可选,使用投影操做符指定返回的键。查询时返回文档中全部键值, 只需省略该参数便可(默认省略)。
pretty():易读
操做 | 格式 | 范例 |
---|---|---|
等于 | {<key>:<value> } |
db.col.find({"by":"菜鸟教程"}).pretty() |
小于 | {<key>:{$lt:<value>}} |
db.col.find({"likes":{$lt:50}}).pretty() |
小于或等于 | {<key>:{$lte:<value>}} |
db.col.find({"likes":{$lte:50}}).pretty() |
大于 | {<key>:{$gt:<value>}} |
db.col.find({"likes":{$gt:50}}).pretty() |
大于或等于 | {<key>:{$gte:<value>}} |
db.col.find({"likes":{$gte:50}}).pretty() |
不等于 | {<key>:{$ne:<value>}} |
db.col.find({"likes":{$ne:50}}).pretty() |
db.col.find({key1:value1, key2:value2}).pretty()
复制代码
db.col.find(
{
$or: [
{key1: value1}, {key2:value2}
]
}
).pretty()
复制代码
db.col.find(
{
key1: value1,
$or: [
{key2: value2},
{key3: value3}
]
}
).pretty()
复制代码
该参数指定从MongoDB中读取的记录条数。
db.col.find().limit(NUMBER)
复制代码
跳过指定数量的数据
db.col.find().limit(NUMBER).skip(NUMBER)
复制代码
db.col.find().sort({KEY:1})
复制代码
db.col.aggregate(AGGREGATE_OPERATION)
复制代码
举例:如今咱们经过以上集合计算每一个做者所写的文章数,使用aggregate()计算结果以下:
db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : 1}}}])
复制代码
与sql相同:
select by_user, count(*) from mycol group by by_user
复制代码
管道在Unix和Linux中通常用于将当前命令的输出结果做为下一个命令的参数。
MongoDB的聚合管道将MongoDB文档在一个管道处理完毕后将结果传递给下一个管道处理。管道操做是能够重复的。
表达式:处理输入文档并输出。表达式是无状态的,只能用于计算当前聚合管道的文档,不能处理其它的文档。
这里咱们介绍一下聚合框架中经常使用的几个操做: