mongodb中处理插入数据去重问题

最近在写一个爬虫工具,将网站的数据储存到mongodb中,由于数据有重复的,所以我就在建立数据库的时候,为集合建立了索引,下面说下我的步骤,集合名称为drugitem,

下面是集合截图:

我要为name字段创建唯一索引,因为要保证name没有重复:

就这样我运行程序发现数据比原来没有设置唯一索引时少了好多,我仔细查看发现程序在name字段重复的地方停止了,这不是我想要的结果,因为后面的数据还没有查询完成。于是我就删除了原来创建的name索引:

然后remove数据,重新按照老办法重新抓取数据,这样一来数据是得到了,但是本质问题还没解决,里面含有许多重复数据,于是我使用唯一索引+去重操作得到最终结果:

这样做的前提是集合中已经含有所有数据,这样处理后会发现drugitem集合中文档减少,说明去除了重复的文档。

问题虽然解决了,但是我觉得还是不太合适,难道我们每次都要这样处理才能得到最终数据?能不能在程序中插入的时候加以判断(或许这样会增加插入时间)或者在建立集合的时候提前配置好?由于本人初次接触mongodb,希望有高手看到后给予指点。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-30 01:45:09

mongodb中处理插入数据去重问题的相关文章

向mysql中批量插入数据的性能分析

MYSQL批量插入数据库实现语句性能分析 假定我们的表结构如下 代码如下   CREATE TABLE example (example_id INT NOT NULL,name VARCHAR( 50 ) NOT NULL,value VARCHAR( 50 ) NOT NULL,other_value VARCHAR( 50 ) NOT NULL) 通常情况下单条插入的sql语句我们会这么写: 代码如下   INSERT INTO example(example_id, name, valu

vc 在edit控件中动态插入数据滚动显示

内存从网上论坛摘抄整理 思路:给控件设置多行属性,设置垂直滚动条,Auto Vscroll设置为true,放入文本后把插入点设置到末尾 pEdit->LineScroll(pEdit->GetLineCount()); 滚动条滚动到最下端 int len  = pEdit->GetWindowTextLength(); pEdit->SetSel(len,-1,true); //定位光标到内容末尾pEdit->ReplaceSel("12121212");

oracle数据库表中,插入数据的时候如何产生一个 字母+数字 编号?

Oracle 语句中"||"代表什么啊? oracle数据库表中,插入数据的时候如何产生一个 字母+数字 编号? 排序的话,用order by来处理即可.比如:cola123a234b999b335select * from tablename order by col; 结果就是 cola123a234b335b999 如果按倒序排列:select * from tablename order by col desc; 结果就是 colb999b335a234a123 其他回答 先创

Mysql向表中循环插入数据

今天学习Mysql,做实验时想向一个标准插入1000行数据,在oracle中类似于这样 begin for i in 1..1000 loop insert .. end loop; end; / 但是Mysql中不支持匿名块 百度了一下,方法如下: 首先设置delimiter delimiter的作用:告诉解释器,这段命令是否已经结束了,mysql是否可以执行了 默认情况下,delimiter是':'但是当我们编写procedure时,如果是默认设置,那么一遇到':',mysql就要执行,这是

浅析常用STL中容器插入数据失败

昨天在上班的时候,碰到一个问题,关于 STL常用容器插入数据失败. 问题详细:在一个类构造函数填零后,那么map list 插入数据失败了,但是vector不会.测试代码如下: class Test { public: Test(){memset(this,0,sizeof(*this));} void InsertElement(){m_map.insert(std::make_pair(1,1)); } void InsetElement_vector(){ m_vector.push_ba

oracle存储过程中循环插入数据

//oracle 循环插入数据 procedure Insert_WData( p_CODE1 ao_model.code1%type, p_BRANDID ao_model.brandid%type, p_CODE varchar2, p_CONF_VAL varchar2, p_DESC varchar2, p_CODE2 varchar2, p_DESC varchar2, ErrOut in out varchar2) is begin --参数 declare startpositio

MongoDB pymongo模块 插入数据

insert_one(): 对一张不存在表插入数据,他会在插入数据同时自动生成数据表, 例如我要对chat表插入数据,插入一个空数据 import pymongo mongo_client = pymongo.MongoClient( host='192.168.0.112', port=27017, username="admin", password="123456" ) mongo_db = mongo_client["db1"] # 插入

利用java多线程写的一个工具向MongoDb中存储大量数据

jdk:1.7mogodb:3.2mongodb_java_driver:3.2.2 1 import java.io.BufferedReader; 2 import java.io.File; 3 import java.io.FileInputStream; 4 import java.io.IOException; 5 import java.io.InputStreamReader; 6 import java.util.LinkedList; 7 import java.util.L

MyBatis中批量插入数据对插入记录数的限制

<基于Mybatis框架的批量数据插入的性能问题的探讨>(作者:魏静敏 刘欢杰 来源:<计算机光盘软件与应用> 2013 年第 19 期)中提到批量插入的记录数不能超过1000条,实测可以插入超过1000条. 原文地址:https://www.cnblogs.com/huangzejun/p/8143043.html