MongoDB初识——安装连接(centos)
https://blog.csdn.net/maxmao1024/article/details/84426836
MongoDB入门——增删改查
https://blog.csdn.net/maxmao1024/article/details/84528649
> use test
> db.event.drop()
> db.event.insertMany([
{'event_id': 1, 'user_id': 1002, 'date': '2018-11-02'}
,{'event_id': 2, 'user_id': 1002, 'date': '2018-11-02'}
,{'event_id': 3, 'user_id': 1002, 'date': '2018-11-02'}
,{'event_id': 1, 'user_id': 1003, 'date': '2018-11-03'}
,{'event_id': 1, 'user_id': 1004, 'date': '2018-11-03'}
> db.event.find()
{ "_id" : ObjectId("5bfb68a511241f1551cacd9d"), "event_id" : 1, "user_id" : 1002, "date" : "2018-11-02" }
{ "_id" : ObjectId("5bfb68a511241f1551cacd9e"), "event_id" : 2, "user_id" : 1002, "date" : "2018-11-02" }
{ "_id" : ObjectId("5bfb68a511241f1551cacd9f"), "event_id" : 3, "user_id" : 1002, "date" : "2018-11-02" }
{ "_id" : ObjectId("5bfb68a511241f1551cacda0"), "event_id" : 1, "user_id" : 1003, "date" : "2018-11-03" }
{ "_id" : ObjectId("5bfb68a511241f1551cacda1"), "event_id" : 1, "user_id" : 1004, "date" : "2018-11-03" }
# 数据准备完毕,下面的查询等操作为了节约篇幅,一般不展示查询结果,有兴趣的同学可以自己尝试
> db.event.find({event_id:1})
# 基本查找语句, 返回3条文档
db.event.find({event_id:'1'})
# 与mysql 不同的是,mongo在查找时不会自动做类型转换,所以这个查询的返回结果为空
> db.event.find({event_id:1}).skip(1).limit(1)
# skip 和 limit 的使用, 返回1条文档
> db.event.find({event_id:1}).count()
> db.event.count()
> db.event.count({'event_id': 1})
# count 的使用
> db.event.distinct('event_id')
> db.event.distinct('event_id', {'user_id': 1003})
# distinct 的使用, 第一个是去重字段,第二个大括号里的是筛选条件
# 很遗憾的是distinct 后面不能接count了,后面会提到如何处理
> db.event.find({event_id:{$in:[1, 2]}})
> db.event.find({event_id:{$gt:1, $lt:3}})
# 范围查找,$gt, $lt, $gte, $lte
> db.event.find({'date': /2018/})
# 模糊查找,注意只对字符串类型的字段适用,例如user_id 就无法用模糊查找
> db.event.find({event_id:1}).explain()
# explain 的使用,和mysql类似,主要看使用索引的情况
> db.event.find({user_id:{$in:[null]}}) -- 为 null或不存在
> db.event.find({user_id:null}) -- 为 null或不存在
> db.event.find({user_id:{$in:[null],$exists:true}}) -- 存在且为null
> db.event.find({user_id:{$ne:null}}) -- 不为null
# 关于 null、not null 和 exists 的一些处理方法
> db.event.getIndexes()
# 查看集合的所有索引,默认会有 _id 字段的索引
> db.event.ensureIndex({"event_id": 1})
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 1,
"numIndexesAfter" : 2,
"ok" : 1
# 添加索引
> db.event.ensureIndex({"event_id": 1}, {background: 1})
# 在后台添加索引,在集合比较大的时候必须使用后台添加,否则会阻塞其他操作,
# 这里会报错因为重复添加索引
> db.event.ensureIndex({"user_id": 1}, {'unique': true})
# 添加唯一索引,这里会报错因为 user_id 不唯一
> db.event.find({event_id:1}).explain()
# 这时候就能看到 'winningPlan' 里有了查找使用的索引信息
> db.event.dropIndex({'event_id': 1})
# 删除索引
官方文档
https://docs.mongodb.com/v3.6/reference/operator/aggregation-pipeline/
这里只介绍几种常用操作
$match: 查找条件匹配
$project: 字段筛选, 也可以用来重命名字段
$group: 聚合操作,类似mysql的 group by
$sort: 排序
下面我们结合具体的统计需求进行运用
- 查找 user_id 为1002的文档,只保留event_id 字段
> db.event.aggregate([
{$match: {"user_id": 1002}},
{$project: {"_id": 0, "event_id": 1}}
{ "event_id" : 1 }
{ "event_id" : 2 }
{ "event_id" : 3 }
- 分别统计每个event_id的记录总数,按数量由多到少排序
> db.event.aggregate([
{$group: {"_id": "$event_id", count: {$sum: 1}}},
{$project: {"_id": 0, "event_id": "$_id", "count": 1}},
{$sort: {"count": -1}}
{ "count" : 3, "event_id" : 1 }
{ "count" : 1, "event_id" : 3 }
{ "count" : 1, "event_id" : 2 }
MongoDB初识——安装连接(centos)https://blog.csdn.net/maxmao1024/article/details/84426836MongoDB入门——增删改查https://blog.csdn.net/maxmao1024/article/details/845286491. 数据准备> use test> db.event.drop()&...
我们一般通过表达式$sum来计算总和。因为MongoDB的文档有数组字段,所以可以简单的将计算总和分成两种:
1,统计符合条件的所有文档的某个字段的总和;
2,统计每个文档的数组字段里面的各个数据值的和。这两种情况都可以通过$sum表达式来完成。
以上两种情况的聚合统计,分别对应与聚合框架中的 $group 操作步骤和 $project 操作步骤。
1.$group
直接看例子吧。
Case 1
测试集合mycol中的数据如下:
title: 'MongoDB Overview',
description: 'MongoDB is no sql database',
by_user
{$project:{"age": 1}},
{$group:{"_id": "$age"}},
{$group:{"_id": null, "count": {"$sum": 1}}}
假设数据库中名称是Jone的人有多个,以上聚合结果是,数据库中名字是Jone的人,有多少种不同的年龄。
名叫Jon
最近一直在用mongodb,有时候会需要用到统计,在网上查了一些资料,最适合用的就是用aggregate,以下介绍一下自己运用的心得。。
别人写过的我就不过多描述了,大家一搜能搜索到N多一样的,我写一下我的总结。
请大家自行查找更多,以下是关键文档。
操作符介绍:
$project:包含、排除、重命名和显示字段
$match:查询,需要同find()一样的参数
$li...
案例:mongodb中有统计表(stat_list)表,存有每天的统计数据,现在需要按月计算,则需要用到mongo的聚合函数aggregate。
"_id" : ObjectId("5d00d3b66939c1efb80ba325"),
"date" : "2019-06-12",
"daily_count" : "164.34万",
解决方案:
1、将daily_count去掉万字,然后...
说名:本篇文章开始介绍 aggregate(聚合函数)、count() 合计、distinct(去除重复)、$sum(求和操作)、"$unwind"、"$out" 等操作。
MongoDB 聚合操作
MongoDB 中聚合(aggregate) 主要用于处理数据(诸如统计平均值、求和等),并返回计算后的数据结果。
在使用 RoboMongo 的时候发现获取集合有一种新的方式(两种...
Linq聚合操作之Aggregate,Count,Sum,Distinct源码分析
一:Linq的聚合运算
1. 常见的聚合运算:Aggregate,Count, Sum, Distinct,Max,Min
这几个聚合运算,我们在sql中看的还是比较多的。
二:Count
1. 这个我们用到的非常多,Count() / LongCount().
2. LongCount每次都是fore...
索引数组字段,在数组中创建索引,需要对数组中的每个字段依次建立索引。所以在我们为数组 tags 创建索引时,会为 music、cricket、blogs 三个值建立单独的索引。
对mongodb执行aggregate操作命令得到结果集,前端页面展示时有时需要做分页这类场景,需要获得结果集的总数。将整个结果集都查询出来往往需要耗费很大网络io和内存。本文介绍一种方法返回经aggregate处理后结果集的记录总数。
对3.4之前的mongodb版本,aggregate的stages并没有提供$count算子返回结果集记录数,可通过如下方式获得,对一个结果集记录中存在的key或...
-bash: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8): No such file or directory
12245
-bash: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8): No such file or directory
lixumolin:
MongoDB进阶——高级查询和聚合统计(aggregate)
小博测试成长之路:
-bash: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8): No such file or directory
ITACHI_D_:
-bash: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8): No such file or directory
guangsu.:
线上事故反思
Rainy Chan: