1. MongoDB 简介
MongoDB 是一个开源的面向文档的 NoSQL 数据库管理系统, 具有高性能、高可用性、易扩展等特点。
所谓面向文档,是指 MongoDB 的数据存储结构是以 BSON 格式的文档为基础的,一个文档相当于 RDBMS 中的一行记录,但它的结构可以相当灵活,不需要按照固定的表结构来定义。
MongoDB 目前已经成为非常流行的数据库,广泛应用在 Web 应用、大数据处理、物联网、人工智能等领域。
2. MongoDB 和 SQL 的对比
MongoDB 和 SQL 一样,都是数据库管理系统,二者之间有一些重要的区别。
2.1 数据模型对比
SQL 的数据模型是关系模型,也就是表格之间的关系。
相比之下,MongoDB 的数据模型更加灵活,是以 BSON 格式文档为中心的,每个文档都可以拥有自己的字段,并且字段可以是数组、文档、子文档,这与 RDBMS 的数据结构模式具有很大的不同。
2.2 查询语言对比
SQL 使用结构化查询语言,也就是 SQL 语言。
MongoDB 使用类似 JSON 的查询语言。
2.3 事务处理对比
SQL 支持基于 ACID 的事务处理机制,也就是具有原子性、一致性、隔离性、持久性的事务处理。
而 MongoDB 在低版本中不支持事务处理,高版本中支持多文档事务处理。
3. MongoDB 代码推荐
下面我将介绍几个 MongoDB 相关的代码片段,这些代码片段在日常使用 MongoDB 过程中非常有用,并可以帮助提升工作效率。
3.1 查询数据
查询一个集合中的所有文档:
db.collection.find()
按条件查询(假设我们要找到 age 为 18 的所有人):
db.collection.find({"age":18})
限定返回字段
db.collection.find({"age":18},{"name":1,"_id":0})
限定返回数量
db.collection.find().limit(10)
按条件删除
db.collection.remove({"age":18})
按条件更新
db.collection.update({"name":"zhangsan"},{$set:{"age":20}})
3.2 聚合
求和
db.collection.aggregate([{"$group":{"id":"$","total":{"$sum":"$num"}}}])
分组
db.collection.aggregate([{"$group":{"id":"$groupkey","count":{"$sum":1}}}})
单个字段分页
db.collection.aggregate([
{$sort: {"logintime": -1}},
{$skip: 0},
{$limit: 10}
])
3.3 索引
对于大型数据集,如果没有适当的索引将导致查询性能下降,甚至无法使用。
创建索引
db.collection.ensureIndex({"age":1})
删除索引
db.collection.dropIndex({"age":1})
4. 总结
MongoDB 是一个灵活、高性能的 NoSQL 数据库,相比于传统的 SQL 数据库,它具有更加灵活的数据模型和查询语言。
在日常使用 MongoDB 的过程中,合理使用相关的代码片段,可以极大地提升工作效率。