every blog every motto: You can do more than you think.

0. 前言

duang duang duang

1. 正文

1.1 插入数据

import pymongoclient = pymongo.MongoClient()
db = client['test']
collection = db['gb']collection.insert_one({'name': 'xiaoming', 'age': 19})
collection.insert_one({'name': 'xiaoming', 'age': 19})
collection.insert_one({'name': 'xiaomei', 'age': 12})

结果

1.2 方法一 distinct

1.2.1 基本原理

distinct原本只可以查询某条字段的唯一值,和numpy中unique方法类似。演示如下:

name = collection.distinct('name')
print(name)

1.2.2 实例展示

根据某几个字段判断记录是否重复,进而删除重复字段。

name = collection.distinct('name')
age = collection.distinct('age')
name_age = zip(name, age)for name, age in name_age:data = collection.find_one({'name': name, 'age': age})  # 根据字段查询记录collection.delete_many({'name': name, 'age': age})  # 删除所有记录collection.insert_one(data)  # 重新插入记录

1.2.3 结果

1.3 方法二:插入时检查是否重复update

说明:利用update方法,对插入的数据进行判断是否存在,如果存在则不“插入(更新)”,不存在,则插入。具体见1.3.2

1.3.1 普通插入

data = [{'name': 'xiaoming', 'age': 19}, {'name': 'xiaoming', 'age': 19}, {'name': 'xiaomei', 'age': 12}]for ele in data:collection.insert_one(ele)

1.3.2 更新,过滤相同的值(插入前去重)

1. upsert:False

已有数据

1.1 数据库中没有指定的name
up_a = {'name': 'daxia', 'age': 100}up_data = [up_a]
for ele in up_data:temp = collection.update_one({'name': ele['name']}, {'$set': ele}, False)print(temp)

说明:

  • update的第一个参数是查询条件,即根据这个条件查询已存在(集合collection)中的数据
  • update的第二个参数是将要插入的值
  • update的第三个参数upsert,默认为False
    • False:只更新不插入
    • True: 插入、更新

上面代码查询namedaxia 的记录,根据第一个参数判断,数据库中没有对应数据,upsert为False,则,不更新,结果无变换。

1.2 数据库中有指定的name
up_a = {'name': 'xiaomei', 'age': 100}up_data = [up_a]
for ele in up_data:temp = collection.update({'name': ele['name']}, {'$set': ele}, False)print(temp)

如下图,对应数据,进行了更新

2. upsert:True

已有数据

2.1 数据库中没有指定的name
up_a = {'name': 'daxia', 'age': 100}up_data = [up_a]
for ele in up_data:temp = collection.update_one({'name': ele['name']}, {'$set': ele}, True)

如下图所示,插入成功

2.2 数据库中有指定的name
up_a = {'name': 'xiaomei', 'age': 100}up_data = [up_a]
for ele in up_data:temp = collection.update_one({'name': ele['name']}, {'$set': ele}, True)# print(temp)

小结:

  • update的第三个参数upsert

    • 默认False,只更新,不插入
    • True, 即更新,也插入
  • 可以通过设置第三个参数为True,再设置第一个参数为(每条记录的)唯一值对每条记录进行过滤,匹配到相同的唯一值,进行更新,没有匹配到,则插入。达到插入前进行去重的效果。

参考文献

[1] https://www.jianshu.com/p/c9cdf6c8b379
[2] https://www.cnblogs.com/lkd8477604/p/9848958.html
[3] https://blog.csdn.net/Homewm/article/details/89312555
[4] https://www.jianshu.com/p/95db57fd93b3

【pymongodb】去除重复记录相关推荐

  1. oracle 输出重复记录,ORACLE 去除重复记录

    ORACLE 去除重复记录 delete from tbl_talbe where (col1,col2,col3) in (select col1,col2,col3 from tbl_table ...

  2. sql 单表/多表查询去除重复记录

    sql 单表/多表查询去除重复记录 单表distinct 多表group by group by 必须放在 order by 和 limit之前,不然会报错 ********************* ...

  3. sqlite查询数据库去除重复记录

    sqlite查询数据库去除重复记录: select *, count(distinct 字段名) from 表明 where 字段名1 = '条件' group by 字段名

  4. kettle开发篇-去除重复记录+排序记录-Day11

    前言: 今天刚好第十一天,从今天开始我们讲5节关于EXCEL的操作,昨天讲了EXCEL表的计算,今天将在计算之前,需要EXCEL表去重再去计算,避免重复数据影响我们的决策.在这就需要用到两个组件,分别 ...

  5. SQL 去除重复记录 只保留重复记录中的一条

    select a.*  from USERLOGGERFILTER a where loggertime > '2010-05-31' and loggertime < '2010-06- ...

  6. php sql语句去掉重复,sql 去除重复记录的语句

    IF OBJECT_ID('[tb]') IS NOT NULL DROP TABLE [tb] GO CREATE TABLE [tb] ([name] [nvarchar](10),[value] ...

  7. MYSQL 去除重复 记录

    删除旧 delete from a  using mix_crm_contact   as a,mix_crm_contact  as b where a.id<b.id and a.`telp ...

  8. SQL 去除重复、获取最新记录

    应用中常会有需要去除重复的记录,或者获取某些最新记录(如:每个用户可以答题多次,每次答题时间不同,现在要获取所有用户的最新答题记录,即每个用户取最新的一条) 使用group 和max 即可实现上述功能 ...

  9. sql按时间取去重最近_SQL 去除重复、获取最新记录

    应用中常会有需要去除重复的记录,或者获取某些最新记录(如:每个用户可以答题多次,每次答题时间不同,现在要获取所有用户的最新答题记录,即每个用户取最新的一条) 使用group 和max 即可实现上述功能 ...

  10. sql去除重复语句(转)

    sql 单表/多表查询去除重复记录 单表distinct 多表group by group by 必须放在 order by 和 limit之前,不然会报错 ********************* ...

最新文章

  1. 3.1 A Historical Perspective 历史观点
  2. 心酸科研路:3年前CVPR论文,仅被引用11次,如今成就黑洞照片!
  3. (13)处理静态资源(自定义资源映射)【从零开始学Spring Boot】
  4. 如何用node命令和webpack命令传递参数 转载
  5. html css右下角三角形,html – 框内的CSS中的三角形
  6. solaris下常见文件压缩/解压方式简单小结—待续中
  7. 深入理解 Synchronized
  8. java 继承 实现 会重写 方法吗_java 中继承,组合,重载,重写的实现原理 (转)...
  9. PS打造油画般的风景人像
  10. ASP.NET Core 3.0 实战:构建多版本 API 接口
  11. 计算机毕业论文技术可行性怎么写,毕业论文怎么写可行性分析?
  12. 【冰糖Python】深度森林 DeepForest
  13. Android扫码枪数据读取封装
  14. SAP PS 第19节 里程碑开票
  15. Material-design icon生成插件
  16. 2022年最新WordPress主题更新列表(2022年5月28日)
  17. 如何修改图片的dpi?图片的dpi怎么调?
  18. 2017夸专业计算机考研,2017跨专业考研有难度吗?
  19. 天蝎座性格最精确的解析
  20. 抽象类及抽象方法作用

热门文章

  1. html 二级菜单 鼠标移动消失,鼠标一离开导航菜单,二级菜单就隐藏,移不到二级菜单...
  2. python findall_Python 正则表达式:findall
  3. 爬虫实例3 批量抓取数据之异步请求(ajax)
  4. 爬虫技术python代码_2017.07.21 Python网络爬虫之Python代码格式
  5. html 伪元素作用,:before,:after伪元素妙用
  6. 怎么在电脑上看磁盘分配单元的大小_不升级配件、4种方法让电脑提速50%!
  7. php把时间加一天,php如何在某個時間上加一天?一小時? 時間加減(轉)
  8. S2D_基于深度学习的视觉稠密建图和定位_相关文章
  9. 算法笔记_面试题_11.正则表达式匹配
  10. 关于javaweb中sql语句中使用变量的情况