1、MongoDB简介(参考于菜鸟教程)
MongoDB是一个基于分布式文件存储的数据库。由C++语言编写成,旨在为Web应用提供可扩展的高性能数据存储解决方案。是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。(至于关系型数据库与非关系型的具体差别请移步http://www.runoob.com/mongodb/nosql.html)它将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。
关于它的及下载安装流程在菜鸟驿站上有详细的介绍。
2、windows运行并配置mongoDB服务
(1)启动并连接数据库
进入你的安装位置文件夹可以看到(这里默认你已经安装并配置好了MongoDB的环境变量)
在此目录下我们创建一个data文件夹(名称可以任意),然后打开cmd(用管理员身份运行)输入mongod --dbpath + 你的data路径,如Mongod --dbpath D:\mongoDB\data,这样我们便启动了MongoDB服务
然后我们就可以通过cmd输入mongo或使用Pycharm编写Python代码来操作数据库了。
(2)安装服务
mongoDB与mysql等数据库不同,mysql在电脑上安装好了往后都能自启动服务,非常方便,直接连接就好。而mongoDB则需要手动创建,如果你希望能像mysql一样,不需要每启动服务就能直接连接mongoDB数据库,就手动创建服务。(当然如果你不嫌麻烦的话也可以不创建,对你使用mongoDB来说没有任何影响)。
①首先在你的存放数据的文件(我的是data)同级目录下创建一个log文件夹(由于我直接在安装文件里创建了data,所以data、bin都在同级目录下)
②在安装目录中创建一个文件mongod.cfg
内容如下
systemLog:
destination: file
path: D:\mongoDB\log\mongod.log
storage:
dbPath: D:\mongoDB\data
③使用管理员权限打开一个cmd,输入mongod --config "D:\MongoDB\mongod.cfg" --install执行。
④此后打开系统服务就可以找到mongo的服务了,找到后启动此项服务。
此后,如果我们再需要连接mongoDB就可以直接连接了,而不需要再在cmd里通过输入“mongod --dbpath + 你的data路径”来启动。
3、一个简单例子
通过几行python代码从mongoDB的test数据库中读取集合col(表col)中的数据(数据是我之前在菜鸟驿站学习mongoDB时通过cmd在test库中的col表插入的)
import pymongo
mongo_url = "127.0.0.1:27017"
client = pymongo.MongoClient(mongo_url)
DATABASE = "test"
db = client[DATABASE]
COLLECTION = "col"
db_coll = db[COLLECTION ]
queryArgs = {'by':'菜鸟教程'}
search_res = db_coll.find(queryArgs).sort('age',-1)
for record in search_res:
print(f"_id = {record['_id']}, title = {record['title']}, url = {record['url']}")
运行结果:
4、向mongoDB中导入或读取CSV数据
(1)用mongoimport(可导入为txt或csv)导入
打开cmd后输入mongoimport -d test -c risi --type csv --headerline --file C:\Users\Administrator\Desktop\MongoDB学习\iris.data.csv
-d:表示数据库的名字
-c:集合的名称
--type:文件类型
--headerline:指明第一行是列名,不需要导入
--file:文件所在的位置
运行结果:
(2) 从MongoDB中读取CSV数据
import pymongo
import csv
mongo_url = "127.0.0.1:27017"
DATABASE = "vis"
TABLE = "raw_data"
client = pymongo.MongoClient(mongo_url)
db_des = client[DATABASE]
db_des_table = db_des[TABLE]
# newline='' 的作用是防止结果数据中出现空行,专属于python3
with open(f"{DATABASE}_{TABLE}.csv", "w", newline='') as csvfileWriter:
writer = csv.writer(csvfileWriter)
fieldList = [
"_id",
"ipsmalltype",
"filelen",
"fileaffix",
"iscracked",
"starttime",
"scrip",
"dstip",
"srcport",
"dstport",
"vpi1",
"vpi2",
"atm1aaltype",
]
writer.writerow(fieldList)
allRecordRes = db_des_table.find()
# 写入多行数据
for record in allRecordRes:
print(f"record = {record}")
recordValueLst = []
for field in fieldList:
if field not in record:
recordValueLst.append("None")
else:
recordValueLst.append(record[field])
try:
writer.writerow(recordValueLst)
except Exception as e:
print(f"write csv exception. e = {e}")
运行结果:
运行后,控制台会显示读取的数据的情况,然后在你的当前代码所在的目录下会存入你读取的csv文件。
5、Mongodb解决不能连接到服务器的错误
(1)在我某次连接MongoDB的时候,出现了以下错误:
MongoDB shell version: v3.4.2
connecting to: test
Mon Mar 3 23:45:09.491 Error: couldn't connect to server 127.0.0.1:27017 at src/mongo/shell/mongo.js:145
exception: connect failed
导致这个原因有两个:
①你的电脑没有启动mongoDB服务,解决方法:
打开cmd输入mongod --dbpath + 你的data路径
或已配置服务的可直接打开计算机管理找到mongo直接启动服务即可。
②上次关闭Mongodb不当,数据文件还继续占用,正常退出因该是exit命令
解决方法:
删除掉D:\MongoDB\data中的mongod.lock文件,开启MongoDB服务