前言
分享学习mongodb的经验。
简介
什么是mongodb
MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。
MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。
mongDb 的语法
1.库的操作
命令如下:
//创建 选择 dbname库
use dbname
//库列表
show dbs
//collection列表
show collections
2.索引操作
//查看 collectionname 索引
db.getCollection("collectionname").getIndexes();
//为 collectionname 创建field的索引,1正序 -1倒序
db.getCollection("collectionname").createIndex({"field": 1});
//多field 的索引
db.getCollection("collectionname").createIndex({"field1": 1, "field2": -1});
//删除索引
db.getCollection("collectionname").dropIndex({"field": 1});
//删除所有索引
db.getCollection("collectionname").dropIndexes();
关于索引有两点需要注意:
- mongodb 支持对数组字段的多建索引
- mongodb 支持散列索引,地理索引,全文索引
3.查询
use dbname;
//查询 dbname 库 collectionname 集合的21条记录
db.getCollection("collectionname").find({}).limit(21);
//范围查询 Field 大于$gte 小于 $lte
db.getCollection("collectionname").find({"field": { "$gte": 1656037986000, "$lte" : 1656070386000}}).limit(21);
//范围查询 Field In
db.getCollection("collectionname").find({"field" : { "$in": [111, 222, 333]}}).limit(21);
//field是否存在
db.getCollection("collectionname").find({"field" : { "$exists": true}}).limit(21);
4.排序
use dbname;
//按filed字段排序 1 正序 -1倒序
db.getCollection("collectionname").find({}).sort({"field" : -1}).limit(21);
5.聚合操作
- 匹配 $match 的条件
- 根据条件排序
- $project 将管道内的数据重新组织, " newField" : " $oldField"
- 按 newField 对数据进行分组
db.getCollection("collectionname")
.aggregate([
{"$match": {"ts" : { "$gte" : 1638198000000}}},
{"$sort" : {"ts" : -1}},
{"$project" : {"newField" : "$oldField", "ts" : "$ts"}},
{"$group": {_id : "$newField" }}
]);
一些其他的聚合操作
//根据 groupField 分组, 取top5
db.getCollection("collectionname")
.aggregate([
{"$match": {"ts" : { "$gte" : 1638198000000}}},
{"$sort" : {"ts" : -1}},
{"$group": {_id : "$groupField",
"arrayField" : {"$push" : "$$ROOT"}
}
},
{
"$project" : {
"groupField" : "$groupField",
"top5" : { '$slice' : ['$arrayField',5]}
}
}
]);
//拆分 arrayField 的元素
db.getCollection("collectionname")
.aggregate([
{"$match": {"ts" : { "$gte" : 1638198000000}}},
{"$sort" : {"ts" : -1}},
{"$unwind" : "$arrayField"}
]);