赞
踩
MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。
MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成,是一种典型的非关系型数据库。
brew tap mongodb/brew
如果出现以下错误
在终端中输入以下命令 ,然后再执行brew tap mongodb/brew
git config --global --unset http.proxy
git config --global --unset https.proxy
检索可以安装的mongodb版本
brew search mongo
输入以下命令,将自动安装最新版的mongodb社区版
brew install mongodb-community
如果出现以下错误
系统提示需要安装gcc,输入以下命令:
brew install gcc
此时还可能会出错
系统提示要安装Command Line Tools,使用以下命令更新xcode,过程需要花费一些时间。
xcode-select --install
等软件安装好后,依次再安装gcc和mongodb就可以了,这时一般会很顺利。
mongod --version
访问mongoDB网站下载mongodb:https://www.mongodb.com/try/download/community。这里要选择与自己的操作系统匹配的版本。如果是win10的系统可以下载最新的版本,如果是win7系统,建议下载v4.0版。
下载好.msi文件后,双击打开,选择安装类型为Custom。
将安装路径修改为c:\program files\mongod,下一步。
这个页面是对数据库服务进行初步设置。勾选“Install MongoD as a Service”。下面有两个选项,一是“Run service as Network Service user”,意思是以网络用户来运行服务;二是“Run service as a local or domain user”,意思是以本地用户或域用户运行服务。我们勾选第二个,输入本地账户的名称和密码。
取消勾选“Install MongoDB Compass”,这是MongoDB官方的图形化用户界面,在后面我们单独安装。
安装好以后,我们进入到刚刚设定的安装目录中,可以看到mongodb的内容。我们将“C:\Program Files\MongoDB\bin”写入到系统的环境变量中。
打开命令提示符窗口,输入“mongod --version”,如果正常显示mongodb的版本,则说明安装成功。
MongoDB是一种非关系型数据库,在数据的结构上与关系型数据库不同,它是树状的,在层级关系上与SQL相似。
数据在MongoDB中是按照“库Datebase”——“集合Collections”——"文档Document"的层级关系来存储的。文档可以理解为是一个字典,集合可以理解为是包含多个字典的列表,库则是更大的包含多个列表的字典。
如果有过SQL的经验,可通过以下两者的比较来认识MongoDB的特征。
SQL术语/概念 | MongoDB术语/概念 | 解释/说明 |
---|---|---|
database | database | 数据库 |
table | collection | 数据库表/集合 |
row | document | 数据记录行/文档 |
column | field | 数据字段/域 |
index | index | 索引 |
table joins | 表连接,MongoDB不支持 | |
primary key | primary key | 主键,MongoDB自动将_id字段设置为主键 |
在下图中有两个字典,一个字典就是一个document,也就是一行记录,字典中的每一个键就是一个field,也就是一个数据字段。索引对应每个记录的_id。
在命令提示符窗口输入mongod.exe(或者mac的终端),输入mongo.exe(没有d)连接到数据库。
接下来在这里就可以对数据库进行操作了,例如显示数据库列表:
show dbs
例如切换到spider数据库下
>use spider
switched to spider db
show collections
db.collectionname.find().pretty()
查找“released_year”为2004的所有数据。
查找“rating_score”大于等于9.5分的数据。
其他的条件语句请参考下表:
操作 | 格式 | 范例 | RDBMS中的类似语句 |
---|---|---|---|
等于 | {<key>:<value> } | db.col.find({"by":"菜鸟教程"}).pretty() | where by = '菜鸟教程' |
小于 | {<key>:{$lt:<value>}} | db.col.find({"likes":{$lt:50}}).pretty() | where likes < 50 |
小于或等于 | {<key>:{$lte:<value>}} | db.col.find({"likes":{$lte:50}}).pretty() | where likes <= 50 |
大于 | {<key>:{$gt:<value>}} | db.col.find({"likes":{$gt:50}}).pretty() | where likes > 50 |
大于或等于 | {<key>:{$gte:<value>}} | db.col.find({"likes":{$gte:50}}).pretty() | where likes >= 50 |
不等于 | {<key>:{$ne:<value>}} | db.col.find({"likes":{$ne:50}}).pretty() | where likes != 50 |
指定返回的内容
限定只返回满足条件的“movie_title”"actor_1_name""country"的内容,且只返回前10条数据。
db.douban_top250.find({"rating_score":{$gte:9}},{"movie_title":1,"actor_1_name":1,"country":1}).pretty().limit(10)
多条件查询
and多条件查询时,条件之间使用逗号分隔。
db.douban_top250.find({"rating_score":{$gte:9.5},"country":"美国"}).pretty()
or多条件查询,并根据指定条件排序。使用正则表达式查找文本中包含中国,并根据“rating_socre”降序排序
db.douban_top250.find({"rating_score":{$gte:9.5},$or:[{"country":"美国"},{"country":/中国/i}]}).pretty().sort({"rating_score":-1})
官方网站https://robomongo.org/,单击“Download Robo3T + Studio 3T”.
这里根据应用系统的选择要下载版本,填入你的个人信息,点击下载即可。
解压后可以看到文件夹中有两个安装包,一个是robo-3T,也就是robomongo,该软件完全免费;另一个是studio-3T,该软件是robomongo的升级版,是需要收费的,目前提供30天试用。我们安装robo-3T即可。
打开软件后,需要你同意用户条款,然后填写一些个人信息。
点击Create创建一个数据库,并链接它。
在Name中为你的数据库取个名字,其他地方都不需要修改,直接Save,然后点解connect。
打开后,页面的左边是Robo的数据结构。
MongoDB中的指令大多数可以在RoboMongo中正常使用。
pip install pymongo
创建一个连接服务器的实例
- from pymongo import MongoClient
-
- client = MongoClient('localhost',27017)
db = client.tutorial
spider是库的名称,如果没有则会新建一个名为spider的库。如果已经存在,则会直接使用这个库。
collection = db.test1
douban_top250是集合的名称,如果没有则会新建这个集合。
使用insert(参数)方法插入数据,参数就是字典。
- data = {
- 'name':'Jim',
- 'old':18,
- 'sex':'male'
- }
- collection.insert_one(data)
使用insert_many(参数)方法插入多条数据,参数为包含字典的列表。
- datas = [{
- 'name':'cheryl',
- 'old':20,
- 'sex':'female'
- },
- {
- 'name':'susan',
- 'old':17,
- 'sex':'female'
- }
- ]
- collection.insert_many(datas)
在robo中我们可以看到数据插入后的效果。
删除一条数据
collection.delete_one({"name":"Jim"})
单条数据修改:update_one
collection.update_one({"name":"susan"},{"$set":{"old":16}})
根据条件进行计数:返回下列数据中男性的数量
print(collection.count_documents({"sex":"male"}))
根据条件进行计数:返回年龄大于等于18的记录数量
print(collection.count_documents({"old":{"$gte":20}}))
根据某指定内容进行求和:返回所有人员年龄的总和。
print([x for x in collection.aggregate([{"$group":{"_id":None,"total":{"$sum":"$old"}}}])])
输出:[{'_id': None, 'total': 90}]
- from pymongo import MongoClient
- import csv
- client = MongoClient('localhost',27017)
- db = client.spider
- collection = db.douban_top250
- with open('douban_top250.csv','r',encoding='utf-8') as f:
- datas = csv.DictReader(f)
- for data in datas:
- data['movie_rank'] = int(data['movie_rank'])
- data['rating_score'] = float(data['rating_score'])
- data['released_year'] = int(data['released_year'][:4])
- collection.insert_one(data)
实例:爬取虎扑新闻,将爬取结果存储到mongodb中。
- import requests
- from pymongo import MongoClient
-
- def get_data(url):
- headers = {
- 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36'
- }
- res = requests.get(url,headers=headers)
- datas = res.json()
- return datas['data']
-
- def save_to_db(data):
- client = MongoClient('localhost', 27017)
- db = client.spider
- collection = db.hupu_news
- collection.insert_many(data)
-
- if __name__ == '__main__':
- data_list = []
- for i in range(2, 3):
- url = 'https://www.hupu.com/home/v1/news?pageNo={}&pageSize=50'.format(i)
- data_list += get_data(url)
- save_to_db(data_list)
1.目标网站:京东商城
2.需求:爬取京东商城的200条食品信息,包含商品名称product_name,价格price,店铺名称shop_name,并将数据存储到mongodb数据库中。
3.实现技术与提示:(1)自选采用模拟浏览器的方法或者审查真实地址的方法找到目标数据;
(2)在mongodb中建立一个名为spider的数据库,建立一个名为jd_food_info的集合,然后将数据存储到这个集合下。
4.需要提交的作业:.py文件,数据库table mode截图。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。