数据库表描述:
Table Name:NewsFromWeb
Column Name 1:_id
Column Name 2:url
Column Name 3:title
Other Columns ....
....
功能实现的前提:如果数据库表当中有相同的url,则认定是重复的记录.
功能实现的思路:通过Group by一样的查询,找到有相同的记录,做出列表,并且把记录的第二条以后的数据,进行删除,只保留第一条的记录.
从SQL实现上类似:select sum(url) as urlCount from NewsFromWeb group by url.
如下是实现方法:
@Test
public void checkRepeat(){
//first group by key
BasicDBObject key = new BasicDBObject();
key.put("url", true);
BasicDBObject initial = new BasicDBObject();
initial.put("urlCount", 0);
BasicDBObject cond = new BasicDBObject();
cond.put("url", 1);
String reduce = "function(obj,prev) { prev.urlCount++; }";
DBObject objMap = mongoDAO.getCollection().group(key, new BasicDBObject(), initial, reduce);
Set set = objMap.keySet();
Iterator it = set.iterator();
while(it.hasNext()){
String str_key = (String) it.next();
String recordStr = objMap.get(str_key).toString();
DBObject doc = (DBObject) JSON.parse(recordStr);
if (Double.valueOf(doc.get("urlCount").toString())>1){
BasicDBObject condDel = new BasicDBObject();
cond.put("url", doc.get("url").toString());
DBCursor map = mongoDAO.getCollection().find(cond);
int j=0;
while(map.hasNext()){
DBObject obj = map.next();
if (j>0){
System.out.println("正在删除:"+obj);
mongoDAO.getCollection().remove(obj);
}
j++;
}
}
}
}
本人通过测试10万条数据处理大约2分钟左右,只是一个大概的数据,其实跟硬件和重复记录有很大关系,感觉速度还能接受(CPU老赛扬1.6,Window环境)
分享到:
相关推荐
例如,你可以先用上述聚合查询找出重复记录,再通过`remove()`或`deleteMany()`方法删除这些记录。 在Node.js中,你可以使用Mongoose库来操作MongoDB。首先定义你的模型,然后在需要创建唯一索引的字段上使用`index...
你会发现,将数据组织成自包含的JSON风格的文档比组织成关系型数据库中的记录要容易得多。编辑本段目录录中文版序一 XI中文版序二 XIII序 XV前言 XVII第1章 简介 11.1 丰富的数据模型 11.2 容易扩展 11.3...
由于提供的文件内容部分均为重复的网址***,并没有提供实际关于MongoDB的文本信息,因此无法从这部分内容中提取知识点。但是,我可以根据标题《MongoDB权威指南》和描述“该文档详细描述了Mongodb数据库的各种功能,...
如同SQL Server,MongoDB也支持创建唯一索引,以确保字段的唯一性,防止重复数据插入。创建唯一索引的命令如下: ```javascript db.collection.ensureIndex({"name": 1}, {"unique": true}) ``` 4. 组合索引 对于...
- 驱动程序:MongoDB有多种语言的官方驱动,如Python、Java、Node.js等,方便与各种应用程序集成。 9. **安全与认证** - 用户与角色:创建用户并分配权限,控制对数据库和集合的访问。 - SSL连接:启用SSL加密,...
### MongoDB学习笔记知识点详解 #### 一、基本操作命令 **1. 切换数据库** 在MongoDB中,可以通过`use`命令来切换当前的工作数据库。例如,如果想要切换到名为`company`的数据库,可以执行如下命令: ```bash > ...
以上只是部分MySQL面试中的关键点,完整的Java面试还涉及Spring、Spring Boot、MyBatis、消息队列、微服务、数据库优化、JVM、Kafka、MongoDB等更多主题。了解这些知识点有助于准备全面的Java面试。
### Java高级工程师面试总结 #### Java基础 - **Hashtable和HashMap的区别**: - `Hashtable`是线程安全的,而`HashMap`不是。这意味着在多线程环境中使用`Hashtable`时无需额外的同步措施,但这也使得其性能较低...
包括JVM、Java集合框架、多线程并发、基础语法、Spring框架原理、微服务、网络编程、日志处理、分布式协调服务如Zookeeper、消息中间件如Kafka和RabbitMQ、NoSQL数据库如HBase和MongoDB、Cassandra、设计模式、负载...
52. 重复消费:使用消息唯一ID,记录消费状态,避免重复处理。 53. RabbitMQ高可用:通过镜像队列、集群等方式实现。 54. Kafka高可用:Replication和ISR机制,配合Kafka Controller实现。 55. 使用消息队列:...
在这个任务管理系统中,Java 被用来编写后端逻辑,处理数据存储、任务创建、更新和删除等操作。 2. **待办事项列表(Todo List)**:这是一种常见的组织工具,用于记录需要完成的任务。在系统中,用户可以创建、编辑...
在进行JMH基准测试时,我们将针对插入、查询、更新和删除等常见操作,对每个框架进行大量重复的执行,并记录平均执行时间。这将揭示在高并发或大数据量场景下,哪个框架在性能上更具优势。同时,我们还会关注内存...
后端接口接收到删除请求后,不仅要从用户表中物理或逻辑删除记录,还可能需要清理与该用户关联的其他数据,如用户的权限、历史记录等。为了防止数据丢失,可以提供回收站机制,让被删除的用户进入待恢复状态。 3. *...
- DELETE语句:用于删除记录。 - JOIN操作:连接不同表中的数据,如INNER JOIN、LEFT JOIN、RIGHT JOIN和FULL JOIN。 3. 数据库设计 - 正确性:确保数据的准确性,避免数据冗余和异常。 - 规范化:如第一范式...
- **NoSQL数据库**:如MongoDB、Cassandra等,适用于大数据和高并发场景。 通过以上内容,读者可以对Oracle数据库有一个全面的认识,并掌握从基础操作到高级功能的各种技巧。无论是初学者还是有一定经验的开发者,...
这些接口需要遵循一定的命名规则,如GET用于获取数据,POST用于创建新记录,PUT用于更新记录,DELETE用于删除记录。 6. **权限管理**: - 系统需要有权限控制机制,确保只有授权的用户可以进行特定操作,如预订...
在开发超市收银系统时,信息存储是一个至关重要的环节,因为它是系统运行的基础,负责管理商品数据、库存信息、顾客购买记录以及交易详情等。在这个特定的案例中,开发者提到他们使用了集合来暂时存储信息,但这种...
其次,Spring Data MongoDB支持与NoSQL数据库MongoDB的集成。它提供了一个灵活的数据模型,允许开发者使用Java POJOs(Plain Old Java Objects)来表示文档,并且通过Repository接口进行操作。这极大地简化了与非...
4. **数据删除**:使用`DELETE FROM`语句删除表中的记录。 5. **数据定义**:创建表(`CREATE TABLE`)、删除表(`DROP TABLE`)、修改表结构(`ALTER TABLE`)等。 6. **数据控制**:设置用户权限,如`GRANT`和`...
作为一款电子商务平台,"好易多网络电子书店"可能采用的技术栈包括但不限于:前端框架(如React、Vue.js或Angular)、后端开发语言(如Java、Python或Node.js)、数据库系统(如MySQL、MongoDB或PostgreSQL)、...