Mongodb 删除重复数据的几个方法

本文介绍了一种在Mongodb中去除重复数据的方法,包括使用Python脚本、建立索引来删除重复记录,以及一种较为简便的方法:导出数据、清空集合、新建唯一索引并重新导入数据。

Mongodb 删除重复的数据

最近在处理一些专利数据,从专利局爬数据的时候,总会间隙性出现中断,为了保证数据的完整性就进行了一些重复下载。将数据从几万个Excel表格中导入Mongodb后,第一步就是要去掉重复的数据。我的第一反应是写个Python小脚本,结果在执行的时候,由于数据量确实比较大,有十几万条,执行了半个小时仍不见结束。这时候才想着使用数据库的查询命令是不是可以实现去重复的功能。简单搜索实践后总结如下:
1. 使用Python小脚本去重复的代码:

# -*- coding: utf-8 -*-
#
# @Author yxiao@aliyun.com
#

import os
import io
import sys
from pymongo import *

reload(sys)  
sys.setdefaultencoding( "utf-8" )

client = MongoClient(address, port)
db_data = client.db_name
collection_patent = db_data.collection_name

patents = {}
count = 0
for patent_record in collection_patent.find({"_id":{"$ne":0}}):
    if patent_record['public_no'] not in patents.keys():
        patents[patent_record['public_no']] = patent_record
    else:
        count += 1
        collection_patent.delete_one({"public_no":patent_record['public_no']})
print count

2.使用ensureIndex建立索引来删除重复记录,此命令适用于Mongodb 3.0以下版本。在Mongodb3.0以上版本,ensureIndex已经被createIndex取代了,同时dropDups选项也已经被移除了,所以不能再使用以上命令来去掉重复数据:

db.your_collection.ensureIndex({public_no:1}, {unique: true, dropDups: true})

3.下面提供一种比较简单的巧方法:

  1. 将数据导出为JSON格式存档:
    mongoexport.exe -d database_name -c collection_name -o filename.json
  2. 清空当前集合的数据:
    db.yourcollection.remove({})
  3. 新建唯一索引:
    db.yourcollection.createIndex({public_no:1}, {unique:true})
  4. 导入之前存档的JSON文件数据:
    mongoimport -d database_name -c collection_name --upsert filename.json
    用到的几个参数选项说明:-d 数据库名 -c 集合名 -o 导出后的目录及文件名 --upsert 会根据唯一索引去掉重复记录
### 回答1: 将股票数据插入到 MongoDB 中时,可以使用 MongoDB 的唯一索引功能来避免重复插入相同的数据。 具体而言,可以在插入数据前,先检查该数据是否已经存在于 MongoDB 中。若数据已存在,则可以选择更新该条数据,或者直接跳过该数据,不进行插入操作。 为了实现这一功能,可以在 MongoDB 中为股票数据的唯一标识字段(比如股票代码)创建唯一索引。这样,在插入数据时,如果插入的数据已经存在于 MongoDB 中,则会触发唯一索引的限制,从而防止数据重复插入。 除此之外,还可以使用 MongoDB 的 upsert(更新/插入)操作,在执行插入操作时,如果该数据已经存在,则会执行更新操作。这样既能够避免数据重复插入,又能够保证数据的更新。 ### 回答2: 要避免将重复的股票数据插入到MongoDB中,我们可以采取以下措施: 1. 创建唯一索引:在MongoDB中,我们可以为股票数据集合中的某个字段(如股票代码)创建唯一索引。这样一来,当尝试插入具有相同股票代码的记录时,MongoDB将会报错并拒绝插入,从而避免重复数据的插入。 2. 使用upsert操作:在插入股票数据之前,我们可以通过使用upsert操作来检查是否已存在相同股票代码的记录。通过在插入时使用upsert操作,MongoDB将会根据查询条件来执行插入或更新操作。如果查询条件匹配到一条记录,则进行更新操作;如果查询条件未匹配到任何记录,则执行插入操作,从而避免重复插入相同股票代码的数据。 3. 通过数据预处理进行筛选:在将股票数据插入到MongoDB之前,我们可以通过预处理步骤对要插入的数据进行筛选。可以使用算法或规则来过滤出具有不同股票代码的数据,确保只有非重复数据被插入到MongoDB中。 4. 进行数据清洗和去重:在将股票数据插入到MongoDB之前,可以对数据进行清洗和去重操作,去除其中的重复数据。可以使用一些数据清洗的方法,比如使用唯一性约束、数据合并或使用数据清洗工具进行重复数据的清除。 总之,通过创建唯一索引、使用upsert操作、数据预处理和数据清洗等多种方法,我们可以有效避免将重复的股票数据插入到MongoDB中。 ### 回答3: 要避免股票数据在插入到MongoDB中时重复,可以考虑以下几种方法: 1. 设置唯一索引:在MongoDB集合中创建一个唯一索引,以确保插入的数据在某个字段上是唯一的。可以选择使用股票代码、日期、或者其他字段作为唯一索引的依据。 2. 使用upsert操作:在插入数据时,可以使用upsert(update + insert)操作,如果插入的数据已经存在,就更新该数据;如果数据不存在,则插入新的数据。 3. 使用更新操作:在插入数据之前,先进行查询,判断是否已存在相同的数据。如果存在相同数据,可以选择更新操作,即更新已存在的数据。如果不存在相同数据,则进行插入操作。 4. 数据去重处理:在插入数据之前,可以先对待插入的数据进行去重处理,排除已存在的数据。可以通过在MongoDB中对已有数据进行查询,然后将待插入数据中已存在的数据去除,只插入新的数据。 5. 使用批量插入:将待插入的数据进行批量插入,使用MongoDB的批量插入操作,会自动过滤掉已存在的数据,只插入新的数据。 以上是几种可以避免股票数据重复插入进MongoDB方法,根据具体的需求和实际情况选择适合的方法来实现数据去重。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值