MongoDB的安装、Mongo shell和PyMongo的基本使用

本文详细介绍了在CentOS7系统中安装和配置MongoDB的过程,包括下载安装包、解压、移动到指定位置、配置环境变量、启动与关闭服务、设置远程访问、创建用户等步骤,同时提供了MongoDBShell的基本命令和pymongo的使用示例。

MongoDB安装

系统环境:CentOS 7

1、下载安装包

curl -O https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.2.12.tgz

2、解压

tar -zxvf mongodb-linux-x86_64-3.2.12.tgz

3、移动到指定位置

mv  mongodb-linux-x86_64-3.2.12/ /usr/local/mongodb

4、在/usr/local/mongodb下创建文件夹

mkdir -p data/db
mkdir  logs

5、在/usr/local/mongodb/bin下新建配置

vi mongodb.conf

输入如下内容:

dbpath = /usr/local/mongodb/data/db #数据文件存放目录
logpath = /usr/local/mongodb/logs/mongodb.log #日志文件存放目录

port = 27017  #端口
fork = true  #以守护程序的方式启用,即在后台运行
nohttpinterface = true
auth=true
bind_ip=0.0.0.0

6、环境变量配置

vi /etc/profile

输入如下内容:

export MONGODB_HOME=/usr/local/mongodb
export PATH=$PATH:$MONGODB_HOME/bin

保存后,重启系统配置:

source /etc/profile

7、启动
在/usr/local/mongodb/bin下

./mongod -f mongodb.conf

MongoDB 提供了简单的 HTTP 用户界面。 如果你想启用该功能,需要在启动的时候指定参数 --rest 。注意:该功能只适用于 MongoDB 3.2 及之前的早期版本。

./mongod -f mongodb.conf --rest

MongoDB 的 Web 界面访问端口比服务的端口多1000。
如果你的MongoDB运行端口使用默认的27017,你可以在端口号为28017访问web用户界面,即地址为:http://localhost:28017

8、关闭

./mongod -f ./mongodb.conf --shutdown

9、设置远程访问

firewall-cmd --zone=public --add-port=27017/tcp --permanent #设置防火墙
firewall-cmd --reload #重启防火墙
firewall-cmd --permanent --query-port=27017/tcp #查看是否设置成功

10、MongoDB后台管理 Shell
MongoDB Shell是MongoDB自带的交互式Javascript shell,用来对MongoDB进行操作和管理的交互式环境。当你进入mongoDB后台后,它默认会链接到 test 文档(数据库):

cd /usr/local/mongodb/bin
./mongo
MongoDB shell version: 3.2.12
connecting to: test
……

11、创建用户
创建用户管理员:

  use admin
  db.createUser({user:"root",pwd:"root123456",roles:["userAdminAnyDatabase"]})
  db.auth('root','root123456')

以用户管理员身份登录,并切换数据库,创建数据库用户:

# 切换到test数据库
  use test
# 创建用户名、密码、角色
  db.createUser({user:"username",pwd:"@user123456*",roles:[{role:"readWrite",db:"securitydata"}]})
# 设置mongodb配置中的auth为true(mongod.conf):auth=true
# 验证mongodb数据库权限
  db.auth('user','@user123456*')

Mongo shell基本命令

数据库

show dbs #显示所有数据库
use DATABASE_NAME #切换到数据库DATABASE_NAME
db.dropDatabase() #删除当下数据库

集合

use test
db.createCollection("mycol")
db.createCollection("mycol", { capped : true, autoIndexId : true, size : 6142800, max : 10000 } )
show collections
db.mycol.drop()

文档

# 增加
db.col.insert({title: 'MongoDB 教程', 
    description: 'MongoDB 是一个 Nosql 数据库',
    by: '菜鸟教程',
    url: 'http://www.runoob.com',
    tags: ['mongodb', 'database', 'NoSQL'],
    likes: 100
})

# 删除
db.col.remove({'title':'MongoDB 教程'})
db.col.remove({}) # truncate 所有数据

# 更新 
db.col.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}},{multi:true}) #没有multi参数则只更新发现的第一条记录
#查看更多:http://www.runoob.com/mongodb/mongodb-update.html

# 查询
db.col.find({key1:value1, key2:value2}).pretty()
db.col.findOne({key1:value1, key2:value2}).pretty()
#查看更多:http://www.runoob.com/mongodb/mongodb-query.html

pymongo基本使用

连接

from pymongo import MongoClient

# 连接客户端方式
client = MongoClient()
client = MongoClient('localhost', 27017)

# 连接db方式
db = client.test_database
db = client['test-database']

# 连接collection方式
collection = db.test_collection
collection = db['test-collection']

# 需要用户认证时,在db实例化后执行下列代码
db.authenticate(ACCOUNT, PWD) #对应db的账户和密码

文档的常用命令

posts = db.posts

# 插入
post = {"author": "Mike"}
post_id = posts.insert_one(post).inserted_id

# 批量插入
new_posts = [{"author": "Mike",{"author": "Eliot"}]
result = posts.insert_many(new_posts)
result.inserted_ids

# 查询
posts.find_one({"author": "Eliot"})
posts.count_documents({"author": "Mike"})
posts.count_documents({})
posts.find({"date": {"$lt": d}}).sort("author")


参考资料

[1] centos7下mongodb安装和配置
https://blog.youkuaiyun.com/rzrenyu/article/details/79472508
[2] MongoDB菜鸟教程
http://www.runoob.com/mongodb/mongodb-tutorial.html
[3] PyMongo API
http://api.mongodb.com/python/current/tutorial.html

<think>好的,用户之前已经问过关于Scrapy中self.col的问题,现在他们想了解MongoDB在Scrapy中的安装使用。我需要确保回答结构清晰,分步骤讲解,同时注意用户可能的实际应用场景。 首先,用户可能需要从头开始配置MongoDB,所以先讲安装步骤。要包括不同系统的安装方法,比如Ubuntu用apt,CentOS用yum,Mac用Homebrew,Windows用官方安装包。然后启动服务,检查是否安装成功,可能还要提到基本的安全设置,比如创建用户密码,这样更实用。 接下来是Python库的安装,用户需要用pymongo来连接MongoDB,这里需要给出pip安装命令,并提醒添加到requirements.txt,方便项目依赖管理。 然后是Scrapy的集成部分,用户可能不太清楚如何将MongoDB整合到Scrapy的Pipeline中。需要分步骤说明如何创建Pipeline类,在open_spider中连接数据库,选择数据库集合,在process_item中插入数据。给出代码示例,并解释每个部分的作用。还要提到在settings.py中启用Pipeline,以及配置MongoDB的URI、数据库名集合名,可能用户会需要动态配置,比如根据不同的爬虫使用不同的集合。 接下来是优化常见问题。用户可能会遇到性能问题,所以需要建议使用insert_many批量插入,设置索引提升查询速度,异常处理避免爬虫崩溃。另外,数据去重权限问题也是常见点,需要给出解决方案,比如使用唯一索引或者在插入前检查重复。 最后,给出完整代码示例,帮助用户整合所有步骤。可能用户需要直接复制代码进行调整,所以示例要简洁明了,涵盖主要部分。同时提醒用户根据实际情况修改配置,比如主机、端口、认证信息等。 需要注意用户可能是刚接触ScrapyMongoDB的新手,所以步骤要详细,避免使用过于专业的术语,必要时解释概念,比如Pipeline的作用,集合数据库的关系等。此外,用户可能关心实际应用中的问题,如性能优化错误处理,这部分需要重点强调,提供实用的建议。 另外,要确保回答符合之前的系统级指令,数学公式代码块使用正确的格式,用中文回答,结构清晰。可能用户后续会有调试需求,所以在最后邀请用户补充具体场景,以便提供更针对性的帮助。</think>以下是 Scrapy 中 **MongoDB安装使用** 的完整指南,按步骤分解: --- ### 一、MongoDB 安装 #### 1. 安装 MongoDB 服务端 - **Ubuntu/CentOS**: ```bash # Ubuntu sudo apt-get install -y mongodb # CentOS sudo yum install -y mongodb-org sudo systemctl start mongod # Mac (通过 Homebrew) brew tap mongodb/brew brew install mongodb-community brew services start mongodb-community ``` - **Windows**: 从 [MongoDB 官网](https://www.mongodb.com/try/download/community) 下载安装包,按向导安装安装后需手动启动服务。 #### 2. 验证安装 ```bash mongo --version # 输出版本号即成功 ``` #### 3. 基本配置(可选) ```bash # 创建数据存储目录(Linux/Mac) sudo mkdir -p /data/db sudo chown -R `id -un` /data/db # 启动 MongoDB 服务 mongod --dbpath /data/db ``` --- ### 二、安装 Python MongoDB 驱动 在 Scrapy 项目中安装 `pymongo`: ```bash pip install pymongo # 安装库 # 或添加到 requirements.txt echo "pymongo>=4.0" >> requirements.txt ``` --- ### 三、Scrapy 集成 MongoDB #### 1. 创建 Pipeline 类 在 `pipelines.py` 中添加以下代码: ```python import pymongo class MongoPipeline: def __init__(self, mongo_uri, mongo_db, mongo_collection): self.mongo_uri = mongo_uri self.mongo_db = mongo_db self.mongo_collection = mongo_collection @classmethod def from_crawler(cls, crawler): # 从 settings.py 读取配置 return cls( mongo_uri=crawler.settings.get('MONGO_URI'), mongo_db=crawler.settings.get('MONGO_DATABASE'), mongo_collection=crawler.settings.get('MONGO_COLLECTION') ) def open_spider(self, spider): # 连接数据库 self.client = pymongo.MongoClient(self.mongo_uri) self.db = self.client[self.mongo_db] self.collection = self.db[self.mongo_collection] def close_spider(self, spider): # 关闭连接 self.client.close() def process_item(self, item, spider): # 插入数据(自动去重需额外处理) self.collection.insert_one(dict(item)) return item ``` #### 2. 配置 `settings.py` ```python # 启用 Pipeline ITEM_PIPELINES = { 'your_project.pipelines.MongoPipeline': 300, } # MongoDB 配置 MONGO_URI = 'mongodb://localhost:27017' # 默认端口 MONGO_DATABASE = 'scrapy_data' # 数据库名 MONGO_COLLECTION = 'articles' # 集合名(可动态设置) ``` #### 3. 动态集合名(可选) 在 Spider 中覆盖默认集合名: ```python class MySpider(scrapy.Spider): custom_settings = { 'MONGO_COLLECTION': 'dynamic_collection_name' } ``` --- ### 四、优化与高级用法 #### 1. 批量插入提升性能 ```python def process_item(self, item, spider): # 在 Spider 中缓存数据 spider.items_buffer.append(dict(item)) if len(spider.items_buffer) >= 100: self.collection.insert_many(spider.items_buffer) spider.items_buffer.clear() return item ``` #### 2. 唯一索引去重 在 `open_spider` 中创建索引: ```python def open_spider(self, spider): # 创建唯一索引(避免重复数据) self.collection.create_index([('url', pymongo.ASCENDING)], unique=True) ``` #### 3. 异常处理 ```python from pymongo.errors import DuplicateKeyError def process_item(self, item, spider): try: self.collection.insert_one(dict(item)) except DuplicateKeyError: spider.logger.warning(f"重复数据: {item['url']}") return item ``` --- ### 五、完整代码示例 ```python # settings.py 配置 ITEM_PIPELINES = {'myproject.pipelines.MongoPipeline': 300} MONGO_URI = 'mongodb://user:password@localhost:27017/' # 带认证 MONGO_DATABASE = 'news' MONGO_COLLECTION = 'headlines' # pipelines.py class MongoPipeline: # ... 完整代码参考上文 ... ``` --- ### 六、常见问题排查 1. **连接失败** - 检查 `MONGO_URI` 格式:`mongodb://用户名:密码@主机:端口` - 确认 MongoDB 服务是否运行:`sudo systemctl status mongod` 2. **权限问题** 在 MongoDB Shell 中创建用户: ```javascript use admin db.createUser({user: "admin", pwd: "password", roles: ["root"]}) ``` 3. **数据未写入** - 检查 Pipeline 是否在 `settings.py` 中启用 - 查看 Scrapy 日志是否有异常 --- 如果需要更具体的调试帮助,可以分享你的实际代码或错误日志!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值