首页 > 数据库 >mongoDB的数据去重distinct(十三)

mongoDB的数据去重distinct(十三)

时间:2023-03-12 21:32:34浏览次数:34  
标签:test1 group dept distinct mongoDB db 十三 id select

要实现mysql中的sql语句,具体如下:

select max(_id),dept from test1 group by dept;

1.在mongodb中写入数据

db.test1.insert({"dept": "A", "item": { "sku": "111", "color": "red" }, "sizes": [ "S", "M" ] })
db.test1.insert({"dept": "A", "item": { "sku": "111", "color": "blue" }, "sizes": [ "M", "L" ] })
db.test1.insert({"dept": "B", "item": { "sku": "222", "color": "blue" }, "sizes": "S" })

mongoDB的数据去重distinct(十三)_sql语句

2.mongodb中有distinct,但是只能实现如下效果

db.inventory.distinct("dept") 

mongoDB的数据去重distinct(十三)_sql_02

去重后统计数量:

db.inventory.distinct("dept").length

3.此时只能利用aggregate来完成

db.test1.aggregate(
{
$group:{_id:"$dept",minvalue:{$min:"$_id"}}
}
)

mongoDB的数据去重distinct(十三)_mongodb_03

如果要实现

select max(_id),dept from test1 where xx=? group by dept;

可以增加 $match:{xx:'chenzong'} 到aggregate中去

4.如果需要实现以下sql

select * from test1 where _id in (
select max(_id) from test1group by dept
);

此时可以通过以下2步来完成:

(1).创建分组去重后的视图View_test1
db.createView("View_test1","test1",[{$group:{_id:"$dept",minvalue:{$min:"$_id"}}}])

mongoDB的数据去重distinct(十三)_sql_04

(2).利用mongodb的$lookup来完成  
db.View_test1.aggregate([{
$lookup:{
from:"test1",
localField:"minvalue",
foreignField:"_id",
as:"aa_docs"
}
}])

mongoDB的数据去重distinct(十三)_sql语句_05

5.如果需要实现以下sql(去重后统计数量)

  select count(1)
from (select fromUser, count(1)
from ldmError
where hosCode = '00002'
group by fromUser);

对应的mongodb语句为:

db.ldmError.group({
key:{fromUser:1},
cond:{hosCode:"00002"},
reduce:function(curr,result){
result.total++;
},
initial:{total:0}
}).length

标签:test1,group,dept,distinct,mongoDB,db,十三,id,select
From: https://blog.51cto.com/u_13753753/6116277

相关文章

  • 第十三章:细雨霖霖传琴音,宝珠熠熠源护佑
    这次的葬礼,使得城中消沉了几日。街巷中的摊贩稀少了许多,店铺也大多闭门不开。大家心中各有苦楚,或是缅怀亲近之人,或是感伤于烈士。都说时间是抚慰心灵伤口的最佳特效药,在时......
  • MongoDB复制集APS架构问题(writeConcern)
    当前数据库采用APS架构(主、从、仲裁),考虑对服务器进行迁移,迁移从库时,主库无法写入查看应用链接配置发现端倪mongo复制集从库关机,对write-concern参数进行测试[mongo@Mon02......
  • Mongodb存储二进制文件GridFS空间复用测试
    Oracle可以存储二进制文件,测试后发现lob字段再数据delete后表空间不能被复用,考虑将数据存储在mongodb中,mongodb存在GridFS,测试GridFS是否也存在相同的情况mongofiles命令介......
  • MongoDb服务搭建
    参考官网教程:https://www.mongodb.com/docs/v4.4/tutorial/install-mongodb-on-red-hat/1、配置yum仓库,安装[mongodb-org]name=MongoDBRepositorybaseur......
  • MongoDB的安装
    ......
  • mongodb进程down,无报错
    背景操作系统:CentOS7.5MongoDB:4.4.7现网有mongodb分片集群共3个节点(3个分片副本集,不包括config副本集),后续因业务增长需扩容3个新节点(新增3个分片副本集)。扩容的服务器......
  • 改变容器存储位置后启动mongo失败,报错Failed to unlink socket file tmpmongodb-27017
    一.改变容器存储位置默认存储位置是/var/lib/docker1.停止dockersystemctlstopdocker有时候会报错Warning:Stoppingdocker.service,butitcanstillbeactiva......
  • 软件工程学习第十三天
    今天我又格外拿出了半小时继续学习css,今天的内容是css的display和Visibility。display可以设置一个元素应如何显示,而Visibility则可以指定一个元素显示还是隐藏。不过隐藏......
  • percona-server-mongodb-6.0源码安装
    ###################################请注意,预构建的二进制文件可在 mongodb.org上获得,这可能是最简单的入门方式,而不是从源代码构建。要构建MongoDB,您需要:能够编译......
  • MongoDB找出冗余和未被使用的索引
    找出冗余的索引varldb=db.adminCommand({listDatabases:1});for(i=0;i<ldb.databases.length;i++){if(ldb.databases[i].name!='admin'&&......