0%

pymongo

mongodb的操作及使用

安装

  • Windows安装

    下载地址 :www.mongodb.com

    下载完成之后一顿下一步即可安装。

  • Linux安装

    • 安装方法

      百度之很多,我使用的是Docker进行安装的,简单。

    • 基本操作

      • 配置远程及设置密码
        • 修改配置文件mongodb.conf中bind_ip将127.0.0.1改成0.0.0.0
        • ```
          • security:
            authorization: disabled ->改为enable
            1
            - 添加管理员
            db.createUser({user:’username’,pwd:’pwd’,roles:[‘readWrite’,db:’admin’]})
            db.createUser({user:’admin’, pwd:’admin’, roles: [{ role: “userAdminAnyDatabase”, db: “admin” }]})
            1
            2
            3
            - Docker安装
            - 安装方法
            pull最新版本mongp
            docker pull mongo
            1
            运行 `--name`设置名称 `-v`挂载数据 `-p`端口映射 `-d`后台运行
            docker run –name mongodb -v ~/docker/mongo:/data/db -p 27017:27017 -d mongo
            1
            设置用户进入`mongodb`容器进行设置
            docker exec -it mongodb bash
            mongo

            进入 admin 的数据库

            use admin

            创建管理员用户

            db.createUser(
            {
            user: “admin”,
            pwd: “pwd”,
            roles: [ { role: “userAdminAnyDatabase”, db: “admin” } ]
            }
            )

            创建有可读写权限的用户. 对于一个特定的数据库, 比如’demo’

            db.createUser({
            user: ‘username’,
            pwd: ‘pwd’,
            roles: [{role: “readWrite”, db: “demo”}]
            })
            1
            2
            3
            - 远程访问

            在 `mongodb` 的容器当中操作修改`bindIP`
            #更新源
            apt-get update

            安装 vim

            apt-get install vim

            修改 mongo 配置文件

            vim /etc/mongod.conf.orig

            修改bindIP为0.0.0.0

            bindIp: 0.0.0.0
            1
            2
            3
            4
            5
            6
            7
            #### pymongo操作
            - 增
            ```python
            #插入一条数据
            insert_one()
            #插入多条数据
            insert_many
  • 1
    2
    3
    4
    5
    6
    #删除单条
    delete_one({查询条件})
    #删除多条
    delete_many({查询条件})
    #删除说有
    delete_many({})
  • 1
    update_many({查询}, { "$set": { 修改 } }) 或 update_one({查询}, { "$set": { 修改 } })
  • 1
    2
    3
    4
    5
    6
    7
    8
    9
    #查询多条数据
    find()
    #查询一条数据
    find_one()
    #查询指定字段
    find({},{ "_id": 0, "name": 1, "alexa": 1 })
    `0`为不显示,`1`为显示
    #查询条件
    find({ "name": 条件 }) 或 find_one({ "name": 条件 })

    fastapi+mongodb线报爬虫案例

  • 爬取及去重

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
        #科学刀最新线报
    def spider_kxd(self):
    site = '科学刀'
    soup = Spider(kxd_api).soup
    for soup_a in soup.xpath('//a[@class="s xst"]'):
    title = soup_a.text
    link = soup_a.get('href')
    msg = { "title": title, "link": link, "site": site ,"pubtime":int(time.time())}
    q = mycol.find_one({ "link": link })
    if q == None:
    mycol.insert_one(msg)
    print(title,'采集成功!')

    通过mycol.find_one({ "link": link })查询爬取地址是否已在数据库中,为空则进行爬取。

  • fastapi

    1
    2
    3
    4
    5
    6
    7
    8
    @app.get('/')
    def index(request: Request):
    p = mycol.find().sort([("pubtime",-1)]).limit(20)
    data = []
    for i in p:
    msg = {'title':i['title'],'link':i['link']}
    data.append(msg)
    return data

    通过sort进行排序(1为正序,-1为倒序),limit截取显示数量。