1. import pymongo
  2. import click
  3. # 数据库基本信息
  4. db_configs = {
  5. 'type': 'mongo',
  6. 'host': '127.0.0.1',
  7. 'port': '27017',
  8. "user": "",
  9. "password": "",
  10. 'db_name': 'spider'
  11. }
  12. class Mongo():
  13. def __init__(self):
  14. self.db_name = db_configs.get("db_name")
  15. self.host = db_configs.get("host")
  16. self.port = db_configs.get("port")
  17. self.client = pymongo.MongoClient(f'mongodb://{self.host}:{self.port}', connect=False, maxPoolSize=10)
  18. self.username = db_configs.get("user")
  19. self.password = db_configs.get("passwd")
  20. if self.username and self.password:
  21. self.db = self.client[self.db_name].authenticate(self.username, self.password)
  22. self.db = self.client[self.db_name]
  23. def reset_status(self, col="dianping_seed_data"):
  24. self.db[col].update_many({'$or': [{'status': 1}, {'status': 3}]}, {'$set': {"status": 0}})
  25. def reset_all_status(self, col="dianping_seed_data"):
  26. self.db[col].update_many({}, {'$set': {"status": 0}})
  27. def add_index(self, col="dianping_seed_data"):
  28. # status_code 0:初始,1:开始下载,2下载完了
  29. self.db[col].create_index([('status', pymongo.ASCENDING)], unique=True)
  30. def get_index(self, col="dianping_seed_data"):
  31. index_list = self.db[col].list_indexes()
  32. for index in index_list:
  33. print(index)
  34. # 找出重复的放入result表中
  35. def find_duplicate(self, col="dianping_seed_data"):
  36. """
  37. {'$out': 'result'}:聚合之后将结果写到新的集合result表里。
  38. :param col:
  39. :return:
  40. """
  41. result = self.db[col].aggregate([
  42. {'$group': {
  43. '_id': {'url': "$url"},
  44. '_id_list': {'$addToSet': "$_id"}, ##_id字段添加到返回结果里面去
  45. 'status': {'$addToSet': "$status"}, ##status字段添加到返回结果里面去
  46. 'count': {'$sum': 1}
  47. }}, {'$out': 'result'}
  48. ], allowDiskUse=True)
  49. for item in result:
  50. print(item)
  51. return result
  52. def delete_dup(self, col="dianping_seed_data"):
  53. delete_data = self.db.result.find()
  54. try:
  55. for d in delete_data:
  56. # 保留一条
  57. unique_id_list = d.get("_id_list")[1:]
  58. for did in unique_id_list:
  59. self.db[col].delete_one({'_id': did})
  60. self.db.result.drop()
  61. except Exception as e:
  62. print("删除的时候出现问题", e.args)
  63. @click.command()
  64. @click.option('--s', type=str, default="two", help="状态:all表示全部重置为0,two:表示重置状态为1、3的重置为0")
  65. @click.option('--i', type=str, default="a", help="a:增加索引 g:获取索引")
  66. @click.option('--d', type=str, default="f", help="d:删除 f:查询并生成聚合之后的结果")
  67. def run(s, i, d):
  68. m = Mongo()
  69. if s:
  70. print("获取参数为:", s)
  71. if s == "all":
  72. print("所有数据状态重置为0:", s)
  73. m.reset_all_status()
  74. elif s == "two":
  75. print("部分数据状态重置为0:", s)
  76. if i:
  77. if i == "a":
  78. m.add_index()
  79. elif i == "g":
  80. m.get_index()
  81. if d:
  82. if d == "d":
  83. m.delete_dup()
  84. elif i == "f":
  85. m.find_duplicate()
  86. if __name__ == '__main__':
  87. m = Mongo()
  88. m.delete_dup()

pymongo helper的更多相关文章

  1. [C#] 简单的 Helper 封装 -- RegularExpressionHelper

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  2. handlebars自定义helper的写法

    handlebars相对来讲算一个轻量级.高性能的模板引擎,因其简单.直观.不污染HTML的特性,我个人特别喜欢.另一方面,handlebars作为一个logicless的模板,不支持特别复杂的表达式 ...

  3. Encountered an unexpected error when attempting to resolve tag helper directive '@addTagHelper' with value '"*, Microsoft.AspNet.Mvc.TagHelpers"'

    project.json 配置: { "version": "1.0.0-*", "compilationOptions": { " ...

  4. VS2015突然报错————Encountered an unexpected error when attempting to resolve tag helper directive '@addTagHelper' with value 'Microsoft.AspNet.Mvc.Razor.TagHelpers.UrlResolutionTagHelper

    Encountered an unexpected error when attempting to resolve tag helper directive '@addTagHelper' with ...

  5. JavaScript模板引擎artTemplate.js——template.helper()方法

    上一篇文章我们已经讲到了helper()方法,但是上面的例子只是一个参数的写法,如果是多个参数,写法就另有区别了. <div id="user_info"></d ...

  6. Python: Windows 7 64位 安装、使用 pymongo 3.2

    官网tutorial:  http://api.mongodb.com/python/current/tutorial.html 本教程将要告诉你如何使用pymongo模块来操作MongoDB数据库. ...

  7. [ASP.NET MVC 小牛之路]13 - Helper Method

    我们平时编程写一些辅助类的时候习惯用“XxxHelper”来命名.同样,在 MVC 中用于生成 Html 元素的辅助类是 System.Web.Mvc 命名空间下的 HtmlHelper,习惯上我们把 ...

  8. asp.net MVC helper 和自定义函数@functions小结

    asp.net Razor 视图具有.cshtml后缀,可以轻松的实现c#代码和html标签的切换,大大提升了我们的开发效率.但是Razor语法还是有一些棉花糖值得我们了解一下,可以更加强劲的提升我们 ...

  9. C# random helper class

      项目中经常需要模拟些假数据,来做测试.这个随机生成数据的helper类就应用而生: using System; using System.Text; using System.Windows.Me ...

随机推荐

  1. Java 之 常用函数式接口

    JDK提供了大量常用的函数式接口以丰富Lambda的典型使用场景,它们主要在 java.util.function 包中被提供.下面是最简单的几个接口及使用示例. 一.Supplier 接口 java ...

  2. Kubernetes 1.15部署日记-使用kubeadm--<5-6>

    5.配置pod网络 5.1下载calico 网络配置文件 [root@k8s-1 libj]# curl -O https://docs.projectcalico.org/v3.6/getting- ...

  3. (备忘)cron表达式的用法

    一.结构 cron表达式用于配置cronTrigger的实例,实现任务调度的功能. Cron表达式是一个字符串,字符串以5或6个空格隔开,分为6或7个域,每一个域代表一个含义,Cron有如下两种语法格 ...

  4. UIP和lwip的区别 转载

    uIP是专门为8位和16位控制器设计的一个非常小的TCP/IP栈.完全用C编写,因此可移植到各种不同的结构和操作系统上,一个编译过的栈可以在几KB ROM或几百字节RAM中运行.uIP中还包括一个HT ...

  5. CDH构建大数据平台-使用自建的镜像地址安装Cloudera Manager

    CDH构建大数据平台-使用自建的镜像地址安装Cloudera Manager 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.   一.搭建CM私有仓库 详情请参考我的笔记: http ...

  6. SpringBoot找不到html资源的原因

    SpringBoot在写完Controller之后直接启动访问,但是找不到相对应的页面资源,报404错误. 我的Controller编写没有错误,html文件也放在了templates文件夹下,但是为 ...

  7. Webpack快速入门

    什么是Webpack 顾名思义它是一个前端打包工具,通过给定的入口文件自动梳理所有依赖资源(包括css.图片.js等),并按照配置的规则进行一系列处理(转es5.压缩等),打包生成适合现代生产环境要求 ...

  8. 《你说对就队》第九次团队作业:【Beta】Scrum meeting 3

    <你说对就队>第九次团队作业:[Beta]Scrum meeting 3 项目 内容 这个作业属于哪个课程 [教师博客主页链接] 这个作业的要求在哪里 [作业链接地址] 团队名称 < ...

  9. Python正则提取数据单引号内数据,并判断是否是空列表(是否提取到数据)

    #coding=utf- import re string1="asdfgh'355'dfsfas" string2="fafafasfasdfasdf" pa ...

  10. java -static的特性和使用,静态类/方法/块/内部类/回收机制

    mark一下,今天的作业. java-core P115 如果将域定义为static,每个类中只有一个这样的域.(这里的域应该是指一片物理数据空间,而不是单纯的指代某一个变量,而是静态域). publ ...