mongo中高级查询的Distinct、count、group和重复数据删除
(1)计数
功能:简单统计集合中满足一定条件的文档数量。
用法:db.collection.count(
参数描述:其中
例如:
db . collection . find(& lt;查询& gt).limit();
db . collection . find(& lt;查询& gt).skip();
(2)独特
功能:用于复制集合中的文档pin。
用法:db,collection.distinct(字段,查询)
参数说明:字段是去重字段,可以是单个字段名,也可以是嵌套字段名;查询是一个查询条件,可以为空;
例如:
db.collection.distinct("user ",{ " age ":{ $ gt:28 } });//用于查询年龄大于28的不同用户名。
除上述用法外,还可以使用以下其他方法:
db . run command({ " distinct ":" collection name "," key":"distinctfied "," query ":& lt;查询& gt})
Collectionname:重复数据删除统计的集合名称,distinctfield:重复数据删除字段,,
例如:
这两种方法的区别:第一种方法是第二种方法的封装,第一种方法只返回反统计后的字段值集,而第二种方法既返回字段值集,又返回统计时的详细信息。
(3)群体
函数:用来提供比count和distinct更丰富的统计需求,js函数可以用来控制统计逻辑。
用法:db.collection.group (key,reduce,initial},{ day of month:" group:{ _ id:" sum:1 } },{ $ sort:{ con:1 } });
组按时间分组(时间格式)
blogs.com/yuechaotian/archive/2013/02/22/2922268.html
Mapreduce性能调整
blogs . com/sosoft/archive/2013/12/08/3463830 . html
5.db.runCommand相关命令。
DB。run command({ distinct:" consumer records ",key: "userid"}):键值重复删除类似于在mysql中从消费者记录中选择distinct用户id。
DB。RUNCommand ({distinct:“消费者记录”,key:“用户id”})。价值观。Length:查找重复数据删除后的记录数,类似于mysql中消费者记录的select count (distinct user id)。
DB。run command({ distinct:" consumers records ",key: "userid ",查询:{act: "charge"}}):查找去重后的记录数,类似于mysql中的select distinct user id from consumers where act = " charge "。
数据库运行命令(
...{
...组:
...{
...ns:“test 2”,#集合名称。
...关键字:{iname:true},#分组字段
...initial:{dd:0},#按以初始化该值。
...reduce后,函数返回的值。
...{
...prev.dd=doc.iage+prev.dd #
...}
...
...}
...}
...)
以字符串形式存储数值的解决方案:
数据库运行命令(
{
组:
{
ns:“消费记录”,
key:{act:true},
初始:{ct:100,tt:0},
$reduce:函数(doc,prev)
{
},
}
}
)
移除重量
1,直接用distinct语句查询,这个查询会将所有查询到的数据返回给用户,然后求出查询结果集的总和(内存消耗,耗时)。
var len = db . student . distinct(" name ",{"age" : 18})。长度;
打印(镜头)
注意:使用此方法查询时,如果查询结果集大于16M,查询将失败。故障信息如下:
{"message" : "distinct失败:MongoError: distinct太大,16mb上限"," stack" : "script:1:20"}
2.使用聚合函数对统计结果进行多次分组,最后将聚合结果返回给用户。
db.student.aggregate(
{ project:{"name":true}},
{ name"}},
{ sum:1}}}
])
注意:当查询数据较大时,不会出现上述查询失败的情况,并且该查询在内存消耗和时间消耗方面都优于上述查询。
Ps:按id分组,如果将id指定为组合项,由于id不会重复,效果相当于去掉了组合项。
如果你现在需要取出其他字段的集合,你可以使用$push关键字。
//按姓名和性别分组
//将分组后的姓名、性别、年龄放在对应的文档下,形成一个数组。
数据库.学生.聚合(
[
{
姓名",性别: "推送: "推送: "推送:" $年龄" }
}
}
]
).forEach(函数(x){
数据库临时插入(
{
姓名:x.name,
性:x.sex,
年龄:x .年龄
}
);
});