mongodb去除重复_java mongodb 去除重复数据 - CSDN
精华内容
参与话题
  • mongodb 删除重复数据

    2019-03-05 15:16:06
    注:mongodb当前版本是3.4.3 ...查询并循环删除重复数据: 删除语句解析: db.userInfo.aggregate([ { $group: { _id: {userName: '$userName',age: '$age'},count: {$sum: 1},dups: {$addToSet: '$_id'}} ...

    注:mongodb当前版本是3.4.3

    插入六条数据:
    在这里插入图片描述
    查询存在重复的数据:
    在这里插入图片描述

    查询并循环删除重复数据:
    在这里插入图片描述
    删除语句解析:

    db.userInfo.aggregate([
        {
            $group: { _id: {userName: '$userName',age: '$age'},count: {$sum: 1},dups: {$addToSet: '$_id'}}
        },
        {
            $match: {count: {$gt: 1}}
        }
    ]).forEach(function(doc){
        doc.dups.shift();
        db.userInfo.remove({_id: {$in: doc.dups}});
    })
    
    1. 根据 userName 和 age 分组并统计数量,$group 只会返回参与分组的字段,使用 $addToSet 在返回结果数组中增加 _id 字段
    2. 使用 $match 匹配数量大于 1 的数据
    3. doc.dups.shift(); 表示从数组第一个值开始删除;作用是踢除重复数据其中一个 _id ,让后面的删除语句不会删除所有数据
    4. 使用 forEach 循环根据 _id 删除数据

    $addToSet 操作符只有在值没有存在于数组中时才会向数组中添加一个值。如果值已经存在于数组中,$addToSet 返回,不会修改数组。

    注意: forEach 和 $addToSet 的驼峰写法不能全部写成小写,因为 mongodb 严格区分大小写、mongodb 严格区分大小写、mongodb 严格区分大小写,重要的事情说三遍!

    可能出现的问题:
    数据过大会报内存错误:Exceeded memory limit for $group, but didn’t allow external sort. Pass allowDiskUse:true to opt in
    可以在后面添加上这个属性就不会了:allowDiskUse: true

    db.userInfo.aggregate([ {
    $group: { _id: {userName: '$userName',age: '$age'},count: {$sum: 1},dups: {$addToSet: '$_id'}}
    },
    {
    $match: {count: {$gt: 1}}
    }
    ],{
    allowDiskUse: true
    }).forEach(function(doc){
    doc.dups.shift();
    db.userInfo.remove({_id: {$in: doc.dups}});
    })
    

    via:https://www.cnblogs.com/nicolegxt/p/24b3653947991ebe73e5d70609ab2943.html

    展开全文
  • 标红字段可能存在重复数据,需删除重复数据保留一条 2. 聚合操作 db.defect_product_data.aggregate([ { $group: { _id: {barcode: '$barcode', device_code: '$device_code', produce_process: '$produce_...

    1.问题引入

    标红字段可能存在重复数据,需删除重复数据保留一条
    在这里插入图片描述

    2. 聚合操作

    db.defect_product_data.aggregate([
        {
            $group: { _id: {barcode: '$barcode', device_code: '$device_code', produce_process: '$produce_process', produce_user: '$produce_user',produce_shift: '$produce_shift'}, count: {$sum: 1},dups: {$addToSet: '$_id'}}
        },
        {
            $match: {count: {$gt: 1}}
        }
    ],
    {allowDiskUse: true}
    ).forEach(function(doc){
        doc.dups.shift();
        db.defect_product_data.remove({_id: {$in: doc.dups}});
    })
    
    

    3.语句解析

    • 1.根据可能重复的字段分组并统计数量,group使group只会返回参与分组的字段,使用addToSet在返回结果数组中增加_id字段
    • 2.使用$match匹配数量大于1的数据
    • 3 allowDiskUse: true管道阶段的内存(RAM)限制为100 MiB(100 * 1024 * 1024字节)。如果一个阶段超出此限制,则MongoDB将产生错误。要允许处理大型数据集,可以在方法中设置 aggregate()方法的选项allowDiskUse。该allowDiskUse选项允许大部分的聚合管道操作将数据写入到一个临时文件。
    • 4.doc.dups.shift();表示从数组第一个值开始删除;作用是踢除重复数据其中一个_id,让后面的删除语句不会删除所有数据
    • 5.使用forEach循环根据_id删除数据

    $addToSet 操作符只有在值没有存在于数组中时才会向数组中添加一个值。如果值已经存在于数组中,$addToSet返回,不会修改数组。

    注意:forEach$addToSet的驼峰写法不能全部写成小写,因为***mongodb严格区分大小写、mongodb严格区分大小写、mongodb严格区分大小写***,说三遍!

    展开全文
  • Mongodb 删除重复数据的几个方法

    万次阅读 2017-07-10 17:52:41
    Mongodb 删除重复的数据最近在处理一些专利数据,从专利局爬数据的时候,总会间隙性出现中断,为了保证数据的完整性就进行了一些重复下载。将数据从几万个Excel表格中导入Mongodb后,第一步就是要去掉重复的数据。我...

    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 会根据唯一索引去掉重复记录
    展开全文
  • mongoDb删除重复数据

    千次阅读 2018-09-19 12:54:51
    注:mongodb当前版本是3.4.3 ...查询并循环删除重复数据:   删除语句解析: db.userInfo.aggregate([  {  $group: { _id: {userName: '$userName',age: '$age'},count: {$sum: 1},dups: {$addT...

    注:mongodb当前版本是3.4.3

    插入六条数据:

     

    查询存在重复的数据:

     

    查询并循环删除重复数据:

     

    删除语句解析:

    db.userInfo.aggregate([

        {

            $group: { _id: {userName: '$userName',age: '$age'},count: {$sum: 1},dups: {$addToSet: '$_id'}}

        },

        {

            $match: {count: {$gt: 1}}

        }

    ]).forEach(function(doc){

        doc.dups.shift();

        db.userInfo.remove({_id: {$in: doc.dups}});

    })

    1.根据userName和age分组并统计数量,$group只会返回参与分组的字段,使用$addToSet在返回结果数组中增加_id字段

    2.使用$match匹配数量大于1的数据

    3.doc.dups.shift();表示从数组第一个值开始删除;作用是踢除重复数据其中一个_id,让后面的删除语句不会删除所有数据

    4.使用forEach循环根据_id删除数据

    $addToSet 操作符只有在值没有存在于数组中时才会向数组中添加一个值。如果值已经存在于数组中,$addToSet返回,不会修改数组。

    注意:forEach和$addToSet的驼峰写法不能全部写成小写,因为mongodb严格区分大小写、mongodb严格区分大小写、mongodb严格区分大小写,重要的事情说三遍!

     

     

     

    聚合框架它是数据聚合的一个新框架,其概念类似于数据处理的管道。 每个文档通过一个由多个节点组成的管道,每个节点有自己特殊的功能(分组、过滤等),文档经过管道处理后,最后输出相应的结果。

    管道基本的功能有两个:

    一是对文档进行“过滤”,也就是筛选出符合条件的文档;

    二是对文档进行“变换”,也就是改变文档的输出形式。

    errmsg:Exceeded memory limit for $group,but didn't allow external Sort.Pass allowDiskuse:true

    错误详细信息:

     

    我这次用的表的数据量是:大约有四百万数据

    我要查的是:用户接受信息最多的前五个用户

    写完分析语句,严格按照语法写的;

    既然出现问题,我们来一下Debug(咱们码农有力量)

    如果管道没有给出预期结果,就需要进行调试,调试时,可以先只指定第一个管道操作符,如果这样得到了预期结果,那就再指定第二个管道操作符,以上面的例子说,先试着$project 操作符进行聚合,如果这个操作符结果是有效的,就在添加 $group 操作符,

    如果结果还是有效的,就再添加 $sort,最后再添加 $limit 操作符,这样就可以逐步定位到造成问题的操作符了。

    逐步调试发现没问题 不是语法的错误

    麻蛋,原因是聚合的结果必须要限制在16M以内操作,(mongodb支持的最大影响信息的大小),否则必须放在磁盘中做缓存(allowDiskUse=True)。

    最后把要统计的数据给搞出来了,喜大普奔。。。。

    zs-----------------------------------------

    db.redis_key.aggregate([
    {
    $group: { _id: {redis_key: '$redis_key'},count: {$sum: 1},dups: {$addToSet: '$_id'}}
    },
    {
    $match: {count: {$gt: 1}}
    }
    ],{allowDiskUse:true}).forEach(function(doc){
    doc.dups.shift();
    db.redis_key.remove({_id: {$in: doc.dups}});
    })

    展开全文
  • MongoDB查询和去除重复数据

    千次阅读 2019-08-28 09:17:27
    1、MongoDB查询重复数据 db.Wuyou_Data.aggregate([ { $group:{_id:{position_name:'$position_name',company_name:'$company_name',work_location:'$work_location',basic_salary:'$basic_salary',publish_time:...
  • mongodb去除重复的值

    千次阅读 2018-07-24 18:58:48
    今天使用mongodb发现某一字段有很多重复的值,需要根据该字段将重复的值删除,保留一份,查了很多资料,写出了一套去重代码记录下来。 首先应该将数据库表备份,这是所有数据处理步骤的最重要一步,谁也不知道会...
  • MongoDB去除重复数据

    千次阅读 2017-03-24 20:06:53
    通过查阅资料,这里有两种方法可以去除重复数据。 1.如果你用的是mongodb 2.x版本,那去重可以可以用如下方法:  db.ensureIndex({‘index_name':1},{'unique':1,'dropDups':1}) 2.如果你用的是mongodb 3.x
  • mongodb重复统计查询

    2017-03-24 06:30:18
    我用的robomongo,要统计不重复的数据 比如![图片说明](https://img-ask.csdn.net/upload/201703/24/1490336533_951197.png) 我要统计2017-03-24当天的数据有3条,根据age去重查询的数据有2条 我要怎样写查询,,,...
  • mongodb 建立唯一索引,去除重复数据

    万次阅读 2017-05-21 13:12:00
    如果建立唯一索引的时候,有数据重复,则会报错,所以可以通过以下方法间接解决: 1.将数据导出json格式 ./mongoexport -d liuniu -c tWechatMessage -o tWechatMessage.json  -d 数据库名 -c 集合名 -o ...
  • mongodb中处理插入数据去重问题

    万次阅读 2015-08-10 17:30:24
    关于mongodb数据库集合中数据去重问题
  • Mongodb怎样删除重复记录

    千次阅读 2015-09-18 13:25:37
    有时我们需要删除重复记录,只保留其中一条数据。  一:方法一 使用MongoVue,建唯一索引的时候可以同时勾选Drop Duplicate自动去重 二:方法二 通过类似下面的代码:
  • mongodb集合要求某一个字段的值唯一 通过在字段建立唯一索引来实现,现在集合里存在重复的数据,创建索引报错如下: > db.CollectedUrl.ensureIndex({uri:1},{unique:true, dropDups:true}) {  "ok" : 0,  ...
  • 解决mongodb id 重复问题

    千次阅读 2019-05-07 15:16:51
    解决mongodb id 重复问题 mongodb在插入数据时出现id重复错误,具体错误代码如下: { [MongoError: E11000 duplicate key error collection: zhihu.people index: id dup key: { : ObjectId(‘59a3b9275f063c20cc8bdec...
  • python MongoDB 插入数据 去除重复数据

    千次阅读 2019-05-14 17:31:19
    最笨的方法呢,就是先把所有的数据插入数据库里,再去除掉多余重复的数据。具体操作呢,繁琐,复杂,效率低,还总容易出现莫名其妙的bug。 最理想的插入方法就是,如果数据库不存在,则插入数据;如果数据已经存在了...
  • mongodb去除重复的数据

    万次阅读 2016-06-30 16:30:23
    虽然mongodb中有distinct来去重,但是和mysql的distinct不同的是,mysql中能用distinct * 返回整条记录的信息,而mongodb的distinct我却只是返回去重的那个字段的数据(或许mongodb也可以返回整条,但是我不知道)。...
  • 我数据库有张表,有科室名和医生名字,一个科室名会对应多个医生,我怎么可以从表里查询出科室名字,并且每个科室名只出现一次![图片说明]...数据库是用spring封装的
  • mongodb去除重复的数据(二)

    万次阅读 2016-07-01 10:56:45
    前天因为工作需要,开始着手对数据库中两千多万的数据中其中一个字段重复的数据进行去重。原本使用一些测试的数据测试后,前天写的那个方法是可行的,但是当面对这个两千万的真实数据时,我却发现这方法有些不顶用了...
  • mongodb查询重复的数据记录

    千次阅读 2019-09-08 21:44:59
    因为刚刚接触mongo,所以记录一下,因为我想在mongo中查询重复的数据有哪一些,以前在mysql中已经很熟练了,但是nosql数据库毕竟不一样,总之思路应该是一样的,就是先根据一定的条件先做聚合操作,然后再判断聚合...
  • 这种情况请使用MongoDB的update来更新数据,而非用insert插入,具体如下: db.collection.update( query, update, { upsert: , multi: , writeConcern: }) 参数说明: query : update的查询条件,类似sql update...
  • 现在数据库中有几千组这样重复的数据,怎么样才能删除呢 只有_id是不一样的,其他都一样 ``` { "_id" : ObjectId("58c0e5c13c4a1aae0828d7a9"), "date_time" : "2017-03-09 13:18:28", "object_code" : "D1_6wgglB...
1 2 3 4 5 ... 20
收藏数 19,187
精华内容 7,674
关键字:

mongodb去除重复