mongodb 做为当前非常流行的文档型nosql数据库,越来越多的公司拿来做业务数据的存储和检索.最近工作中有用到 mongodb ,记录下来一些想法看看能不能给大家点帮助.
一. 基本概念
- 首先mongodb 的存储结构 分三个层级
db 对应我们在mysql中的 database
collection 对应数据库中的 table
document 对应数据库的 row ,代表一行数据
field 对应数据库的 column 的列
index 对应数据库的索引, 只能针对一个 field 建立, 也有组合索引,即可以 给两个或者多个一起建立一个索引, 建立索引的时候必须指点排序方式
mongodb 是不支持 collection 之间join 的. 这一点和es比较像.
-
mongodb 每一行的 field 是可以不一样的,即 {name:"x"} ,{xx:"xx"} 这样的两个文档可以放在一个 collection 中. 这一点和和关系型数据库不太一样
-
mongodb 是不支持sql的, 所有的操作都是用一种类 js的语法来进行操作,这样加重了我们学习的成本
二. mongodb 安装
我们这里介绍一下docker上安装 mongodb的方法
docker pull mongo
docker run -p 27017:27017 -v <LocalDirectoryPath>:/data/db --name docker_mongodb -d mongo
三. 基本使用
插入一个文档
db.tbl_login_logs.insert({"x":"s"})
查询所有的文档
db.tbl_login_logs.find();
按条件查询
db.tbl_login_logs.find({"x":"s"});
聚合
db.tbl_login_logs.aggregate([
{
$match: {
x: "s"
}
},
{
$group: {
_id: "$x",
num_tutorial: {
$sum: 1
}
}
}
])
聚合管道中可以用如下操作,前一个输出的是下一个操作的输入
$project:修改输入文档的结构。可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档。
$match:用于过滤数据,只输出符合条件的文档。$match使用MongoDB的标准查询操作。
$limit:用来限制MongoDB聚合管道返回的文档数。
$skip:在聚合管道中跳过指定数量的文档,并返回余下的文档。
$unwind:将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值。
$group:将集合中的文档分组,可用于统计结果。
$sort:将输入文档排序后输出。
$geoNear:输出接近某一地理位置的有序文档。