Python网络爬虫(十三)——MongoDB

本文详细介绍了MongoDB的安装、启动、基本概念及操作方法,包括如何通过命令行和Python进行数据的增删改查,并提供了实用的示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简介

MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。

MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。

MongoDB

启动 MongoDB

MongoDB 安装之后需要验证 MongoDB 服务,可以选择到 MongoDB 安装目录下的 bin 目录执行:

mongod --dbpath D:\MongoDB\data

上边的命令将会启动 bin 目录下的 MongoDB 服务端,而后边跟的路径则是 data 目录(不存在的话可以手动建立)。

运行 MongoDB

上边只是启动了 MongoDB 服务端,如果要使用 MongoDB 的服务,则还需要启动 MongoDB 的客户端:

  • 添加数据目录:在 MongoDB 的安装目录中添加 data 目录
  • 添加环境变量:为了避免每次执行 MongoDB 的命令都要定位到 bin 目录中,可以将 bin 目录添加到环境变量中
  • 执行命令:在启动 MongoDB 服务段之后(管理员启动),保持终端不要关闭,然后在新的终端(管理员启动)中执行:
mongo

此时就启动了 MongoDB 的客户端,也就可以通过终端来操纵数据库。

Compass

和 MySQL 相似,同样也可以使用 GUI 来进行数据库操作,官方提供的 GUI 是 Compass,使用 GUI 的操作就简单很多了。想要了解的话可以自行下载安装使用。

将 MongoDB 制作为 Windows 服务

启动 MongoDB 之后,如果需要一直使用 MongoDB 的服务,该终端就不能关闭,而且在启动的时候需要指定 data 的路径,这是有点麻烦的。而通过将之制作成 Windows 服务就能够有效避免该问题。步骤为:

  • 创建配置文件:在 mongodb 的安装路径下创建配置文件 configure.cfg,内容为:
logpath=D:\MongoDB\log\mongod.log
dbpath=D:\MongoDB\data

logpath 对应的是日志路径,dbpath 对应的是数据库路径。

  • 安装 MongoDB 服务:执行命令:
mongod --config "D:\MongoDB\configure.cfg" --install
  • 启动 MongoDB:
net start mongodb
  • 关闭 MongoDB:
net stop mongodb
  • 移除 MongoDB:
"D:\MongoDB\bin\mongod.exe" --remove

MongoDB 概念

SQLMongoDB描述
databasedatabase数据库
tablecollection数据库表/集合
rowdocument数据记录行/文档
columnfield数据字段/域
indexindex索引
tablejoins表连接/MongoDB 不支持
primary keyprimary key

主键/MongoDB 自动将 _id 字段设置为主键

MongoDB 元素

主要包括 database,collection,document:

  • document:相当于关系型数据库中的一行。document 是一个对象,由键值对构成,类似于字典,是 json 的扩展形式:
{“name”:"zhangsan","num":"100"}
  • collection:相当于关系型数据库中的表。能够存储多个文档,结构可以不固定
{“name”:"zhangsan","num":"100"}
{“name”:"lisi","age":"20"}
{“name”:"wangwu","sex":"x"}

MongoDB 指令

指令描述
db查看当前数据库
show dbs查看所有数据库
use databasename切换数据库,如果数据库不存在,则进行创建(创建完成后需要插入数据才算做创建成功)
db.dropDatabase()删除当前指向的数据库
db.collectionname.insert(value)添加数据到指定 collection
db.collectionname.find()从指定 collection 中查找数据

pymongo

连接 MongoDB

import pymongo

# 连接 MongoDB 服务,事先需要启动 MongoDB 服务
mongo = pymongo.MongoClient('127.0.0.1',port=27017)
print(type(mongo))
# 获得 test 数据库,没有则创建
db = mongo.test
# 获得 sheet1 collection
collection = db.sheet1
# 插入数据
collection.insert_one({"username":"zhangsan","num":"100"})

结果为:

<class 'pymongo.mongo_client.MongoClient'>

通过上边的数据,可以将输入插入到 test 数据库中的 sheet1 collection 中,最后的结果可以在终端或者 Compass 中查看。

数据类型

类型描述
ObjectID文档 ID
String字符串(有效的 utf-8)
Boolean布尔值
Integer整数型
Double浮点型
Arrays数据或列表,多个值存储到一个键
Object嵌入式文档,此时的一个值就是一个文档
NullNull
Timestamp时间戳,表示从 1997/1/1 至今的总秒数
Date存储当前日期或时间的 UNIX 时间格式

常用函数

insert_one

加入一条 document 到 collection 中。

insert_many

加入多条 document 到 collection 中。

find_one

查找一条 document。

find

查找所有 document。

update_one

更新一条 document。

updata_many

更新多条 document。

delete_one

删除一条 document。

delete_many

删除多条 document。

import pymongo

mongo = pymongo.MongoClient('127.0.0.1',port=27017)
db = mongo.test
collection = db.sheet1

result = collection.find()
for item in result:
    print(item)
print('********************************')

collection.insert_one({"username":"zhangsan","num":"100"})
print(collection.find_one({"num":"100"}))
print('********************************')

collection.insert_many(
    [
        {"username": "lisi", "num": "101"},
        {"username":"wangwu","num":"102"},
        {"username":"zhaoliu","num":"103"}
    ])
result = collection.find()
for item in result:
    print(item)
print('********************************')

collection.update_many({"username":"zhangsan"},{"$set":{"username":"zhangjie"}})
result = collection.find()
for item in result:
    print(item)
print('********************************')

collection.delete_many({"username": "zhangjie"})
result = collection.find()
for item in result:
    print(item)

结果为:

********************************
{'_id': ObjectId('5ec92d4fb19033c10e141c94'), 'username': 'zhangsan', 'num': '100'}
********************************
{'_id': ObjectId('5ec92d4fb19033c10e141c94'), 'username': 'zhangsan', 'num': '100'}
{'_id': ObjectId('5ec92d4fb19033c10e141c95'), 'username': 'lisi', 'num': '101'}
{'_id': ObjectId('5ec92d4fb19033c10e141c96'), 'username': 'wangwu', 'num': '102'}
{'_id': ObjectId('5ec92d4fb19033c10e141c97'), 'username': 'zhaoliu', 'num': '103'}
********************************
{'_id': ObjectId('5ec92d4fb19033c10e141c94'), 'username': 'zhangjie', 'num': '100'}
{'_id': ObjectId('5ec92d4fb19033c10e141c95'), 'username': 'lisi', 'num': '101'}
{'_id': ObjectId('5ec92d4fb19033c10e141c96'), 'username': 'wangwu', 'num': '102'}
{'_id': ObjectId('5ec92d4fb19033c10e141c97'), 'username': 'zhaoliu', 'num': '103'}
********************************
{'_id': ObjectId('5ec92d4fb19033c10e141c95'), 'username': 'lisi', 'num': '101'}
{'_id': ObjectId('5ec92d4fb19033c10e141c96'), 'username': 'wangwu', 'num': '102'}
{'_id': ObjectId('5ec92d4fb19033c10e141c97'), 'username': 'zhaoliu', 'num': '103'}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值