MongoDB的安装与python操作MongoDB
一.安装MongoDB
因为我个人使用的是windows,就只记录下windows下的安装
1.下载安装
就是官网,下载msi,选个路径安装
2.配置
看见别的地方说需要手动在bin同级目录创建data和log文件夹,我安装时它们是自动生成的
在data文件夹中建个专门存数据的文件夹db,
在log文件夹中建个mongodb.log文件来保存日志
然后以管理员身份启动cmd
cd到MongoDB的bin目录下
在命令行输入
mongod --bind_ip 0.0.0.0 --logpath "D:\mongodb\log\mongodb.log" --logappend --dbpath "D:\mongodb\data\db" --port 27017 --serviceName "MongoDB" --serviceDisplayName "MongoDB" --install
这个命令相当于绑定ip,端口,一些路径到系统服务中,上面的路径是自己电脑的路径,运行完没报错应该就是成功了
结果。。。我去任务管理器发现服务状态是停止,也启动不了,说服务没有及时响应启动或控制请求
然后我又用了另一个方法
我先把MongoDB卸载了,然后装的时候没有按默认的启动服务(我想之前没准就是装的时候默认启动了服务的问题)
然后把bin目录下的内容全部拷贝到bin的同级目录下(为了方便)
之后在同级目录下创建data和log文件夹
再建立mongod.conf文件,内容为
systemLog:
destination: file
path: log\mongo.log
logAppend: true
storage:
dbPath: data
net:
bindIp: 127.0.0.1
然后在cmd此目录下执行D:\mongodb>mongod.exe —config mongod.conf
执行完后会什么也没显示,那没准也是成功了。。。可是我又去系统服务里看了下。。。没有服务
我想刚才尝试第一种方案时不是有了服务嘛,我又按照之前输入的命令并按照现在的配置又试了一下,就下边这个命令,注意要以管理员身份执行
mongod --bind_ip 127.0.0.1 --logpath "D:\mongodb\log\mongo.log" --logappend --dbpath "D:\mongodb\data" --port 27017 --serviceName "MongoDB" --serviceDisplayName "MongoDB" --install
运行完之后任务管理器的服务里果然有了,我右键启动了它,成功
又在之前的目录下执行mongo,连接成功
终于MongoDB安装完成。
我发现数据库的安装真的好复杂,容易出错,之前安装mysql的时候就困扰了好久。。。
3.RoboMongo
一个图形化管理工具,使用起来很容易
下载页面为https://robomongo.org/download
二.python操作MongoDB
1.pymongo
pip install pymongo就行
2.连接MongoDB
import pymongo
client=pymongo.MongoClient('mongodb://用户名:密码@服务器IP或域名:端口号')
如果没有设置权限验证,并且数据库在本机那可以像下边这样
client=pymongo.MongoClient('mongodb://localhost:27017')
也可以
client=pymongo.MongoClient(host='localhost',port=27017)
2.创建与指定数据库
有两种方式
第一种:
db2=client.test1
第二种:
db1=client['test1']
很显然是第二种好,因为第二种的数据库名能当变量传递进去,第一个只能手动输入
这里如果有叫test1的数据库,那么就得到这个数据库对象,如果没有,就创建它并得到它
3.创建与指定集合
集合为数据库的下一级,就类比为关系数据库的表
它的创建与指定也有两种方式:
collection1=db1['test1_collection']
collection2=db1.test2_collection
跟数据库的指定类似
4.插入数据
第一种方法:
插入一条数据
data={'name':'sfencs','age':20,'hobby':'coding'}
result=collection1.insert(data)
print(result)#5c23a135080b3347b8a0038c
把字典传入insert方法中
返回的是数据库自动生成的ObjectId,它应该是随时间而增加的
插入多条数据
data=[{'name':'sfencs','age':20,'hobby':'coding'},{'name':'tom','age':30,'hobby':'playing'}]
result=collection1.insert(data)
print(result)#[ObjectId('5c23a210080b331d546543ca'), ObjectId('5c23a210080b331d546543cb')]
insert传入的是由字典组成的列表
第一种方式已经不推荐使用了,虽然能使用,但在使用时也会出现警告:
DeprecationWarning: insert is deprecated. Use insert_one or insert_many instead.
result=collection1.insert(data)
第二种方法:
向上面的警告中,提示我们用insert_one or insert_many instead
插入一条数据
data={'name':'sfencs','age':20,'hobby':'coding'}
result=collection1.insert_one(data)
print(result)#<pymongo.results.InsertOneResult object at 0x000001ED171FE488>
print(result.inserted_id)#5c23a406080b33164cb4486c
传入的依然是字典,返回的是一个InsertOneResult对象,它有inserted_id属性
插入多条数据
data=[{'name':'sfencs','age':20,'hobby':'coding'},{'name':'tom','age':30,'hobby':'playing'}]
result=collection1.insert_many(data)
print(result)# <pymongo.results.InsertManyResult object at 0x000002B3B4B71D08>
print(result.inserted_ids)# [ObjectId('5c23a4a8080b33197c17cb0e'), ObjectId('5c23a4a8080b33197c17cb0f')]
传入的是字典列表,返回的是InsertManyResult对象,它有inserted_ids属性
5.查询
查询一条数据
用find_one方法
result=collection1.find_one({'name':'sfencs'},{'_id':0,'age':0})
print(result)# {'name': 'sfencs', 'hobby': 'coding'}
返回的是一个字典,find_one的第一个参数是一个字典,表示name是sfencs的约束条件,第二个参数是返回的字段,也是一个字典
这个第二个参数字典的键为属性,值为0或1,0表示不返回,1表示返回,所以只需要标明要返回的,或只标明不返回的就行,两个都写就要报错了,但是有一个例外就是数据库默认生成的_id属性,它如果不标明的话,默认是都返回的,只有主动标明0才不返回
除此之外还可以直接根据_id来唯一查找,这时需要引入一个模块,如下:
from bson.objectid import ObjectId
result=collection1.find_one({'_id':ObjectId('5c23a4a8080b33197c17cb0e')})
print(result)# {'_id': ObjectId('5c23a4a8080b33197c17cb0e'), 'name': 'sfencs', 'age': 20, 'hobby': 'coding'}
查询多条数据
使用find方法
result=collection1.find({'name':'sfencs'})
print(result)# <pymongo.cursor.Cursor object at 0x00000177A0A77CF8>
for i in result:
print(i)
'''
{'_id': ObjectId('5c239d86080b334ef0cd5773'), 'name': 'sfencs', 'age': 20, 'hobby': 'coding'}
{'_id': ObjectId('5c239eaa080b3308b8224413'), 'name': 'sfencs', 'age': 20, 'hobby': 'coding'}
{'_id': ObjectId('5c23a135080b3347b8a0038c'), 'name': 'sfencs', 'age': 20, 'hobby': 'coding'}
{'_id': ObjectId('5c23a210080b331d546543ca'), 'name': 'sfencs', 'age': 20, 'hobby': 'coding'}
{'_id': ObjectId('5c23a3eb080b334cbc693608'), 'name': 'sfencs', 'age': 20, 'hobby': 'coding'}
{'_id': ObjectId('5c23a406080b33164cb4486c'), 'name': 'sfencs', 'age': 20, 'hobby': 'coding'}
{'_id': ObjectId('5c23a4a8080b33197c17cb0e'), 'name': 'sfencs', 'age': 20, 'hobby': 'coding'}
'''
返回的是Cursor类型,相当于一个生成器,每一个结果都是一个字典
逻辑查询条件
像刚才的只是固定的条件,还有一些更多可选条件
符号 | 实例 | 含义 |
$lt | {'age':{'$lt':15}} | 年龄小于15 |
$gt | {'age':{'$gt':15}} | 年龄大于15 |
$lte | {'age':{'$lte':15}} | 小于等于 |
$gte | {'age':{'$gte':15}} | 大于等于 |
$ne | {'age':{'$ne':15}} | 不等于 |
$in | {'age':{'$in':[15,20]}} | 在范围内 |
$nin | {'age':{'$nin':[15,20]}} | 不在范围 |
$regex | {'name':{'$regex':'^s.*'}} | 正则表达式 |
$exist | {'name':{'$exist':True}} | name属性存在 |
$type | {'age':{'$type':'int'}} | age类型为int |
$mod | {'age':{'$mod':[5,0]}} | age除以5余0 |
$text | {'$text':{'$search':'aaa'}} | text类型的属性中包含aaa |
$where | {'$where':'obj.name==obj.age'} | 高级查询 |
如果查询条件有多个,可以在字典中放多个键值对
6.排序
result=collection1.find({'name':'sfencs'}).sort('_id',-1)
sort第一个参数是参照的属性,第二个参数为1时是升序,为-1时是降序
7.计数
result=collection1.find({'name':'sfencs'}).count()
print(result)# 7
8.偏移
偏移用来从得到的跳过前几个元素
result=collection1.find({'name':'sfencs'}).skip(3)
for i in result:
print(i)
上边这样就会跳过前三个元素
我们也可以限定出来的元素的个数
result=collection1.find({'name':'sfencs'}).skip(3).limit(2)
这样就跳过了3个并取两个
9.修改
修改也有两种方式
一种是使用update方法,这种同样也不被推荐使用了
我们应该使用update_one,update_many方法
修改一条数据
people=collection1.find_one({'name':'sfencs'})
people['age']=15
result=collection1.update_one({'name':'sfencs'},{'$set':people})
print(result)# <pymongo.results.UpdateResult object at 0x000002714AD7E508>
print(result.matched_count,result.modified_count)#1 1
上面这种方式是先找出来,然后把字典改了,然后再替换掉原来存的document,也就是数据库里的一个字典
返回值是一个UpdateResult对象,它的matched_count属性是匹配的条数,modified_count是影响的条数
update第一个参数是和查询的第一个参数一样
还可以用下面这种方法
result=collection1.update_one({'name':'sfencs'},{'$set':{'age':16}})
print(result)
print(result.matched_count,result.modified_count)
这样的意思是直接把年龄设置为16,其他的不做改动
修改多条数据
result=collection1.update_many({'name':'sfencs'},{'$set':{'age':16}})
print(result)
print(result.matched_count,result.modified_count)# 7 ,6
和修改一条数据的第二种方法差不多,因为里边有一个本来就是age=16了,所以影响条数比匹配条数少一
还可以使指定数据自增
result=collection1.update_many({'name':'sfencs'},{'$inc':{'age':2}})
print(result)
print(result.matched_count,result.modified_count)# 7 ,7
这样使所有的年龄都增加了2
10.删除
删除依然有两种方法
第一种
result=collection1.remove({'age':22})
print(result)# {'n': 1, 'ok': 1.0}
直接删除指定条件的文档
第二种
result=collection1.delete_one({'age':30})
print(result.deleted_count)# 1
delete_one是删除一条,返回值是一个DeleteResult对象,具有deleted_count属性
result=collection1.delete_many({'age':18})
print(result.deleted_count)# 6
这个是删除多条数据
11.去重
result=collection1.distinct('name')
print(result)# ['tom', 'sfencs']
以列名去重返回的是一个该列名的列表,不会对数据库有影响
- 数据库的相关操作都推荐使用有_one和_many后缀的方法
- 上面只是简单介绍了基础操作,具体可查看官方文档http://api.mongodb.com/python/current/api/pymongo/
MongoDB的安装与python操作MongoDB的更多相关文章
- python操作三大主流数据库(7)python操作mongodb数据库①mongodb的安装和简单使用
python操作mongodb数据库①mongodb的安装和简单使用 参考文档:中文版:http://www.mongoing.com/docs/crud.html英文版:https://docs.m ...
- Python 操作 mongodb 数据库
原文地址:https://serholiu.com/python-mongodb 这几天在学习Python Web开发,于 是做准备做一个博客来练练手,当然,只是练手的,博客界有WordPress这样 ...
- 使用Python操作MongoDB
MongoDB简介(摘自:http://www.runoob.com/mongodb/mongodb-intro.html) MongoDB 由C++语言编写,是一个基于分布式文件存储的开源数据库系统 ...
- python操作三大主流数据库(10)python操作mongodb数据库④mongodb新闻项目实战
python操作mongodb数据库④mongodb新闻项目实战 参考文档:http://flask-mongoengine.readthedocs.io/en/latest/ 目录: [root@n ...
- python操作三大主流数据库(9)python操作mongodb数据库③mongodb odm模型mongoengine的使用
python操作mongodb数据库③mongodb odm模型mongoengine的使用 文档:http://mongoengine-odm.readthedocs.io/guide/ 安装pip ...
- python操作三大主流数据库(8)python操作mongodb数据库②python使用pymongo操作mongodb的增删改查
python操作mongodb数据库②python使用pymongo操作mongodb的增删改查 文档http://api.mongodb.com/python/current/api/index.h ...
- python 操作mongoDB数据库
网上关于python 操作mongoDB的相关文章相对不是很多,并且质量也不是很高!下面给出一个完整的 增删改查示例程序! #!/usr/bin/python # -*- coding: utf-8 ...
- mongodb的安装与简单操作
MongoDB中文社区:http://www.mongoing.com 数据库的使用场景 SQL(关系型数据库):MySQL.SQLServer --->磁盘操作 1.高度事务性的场景 ...
- 【MongoDB详细使用教程】四、python操作MongoDB
目录 1.安装pymongo 2.连接数据库 3.操作数据库 3.1.查 3.2.增 3.3.改 3.4.删 使用第三方库pymongo来实现python对MongoDB的操作 pymongo官方文档 ...
随机推荐
- Myeclipse--jBPM4.3插件
http://www.baidupcs.com/file/c7f3b8fc57b056567b37d081b1bcd21e?xcode=3966699596a0e8ec88581bd8407457f9 ...
- 只知道ajax?你已经out了
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由前端林子发表于云+社区专栏 随着前端技术的发展,请求服务器数据的方法早已不局限于ajax.jQuery的ajax方法.各种js库已如雨 ...
- go import使用及. _的作用解析
go中import用于导入包.导入之后就可以使用包中的代码. 比如: import( "fmt" ) 在代码中就可以使用fmt包中的方法,如: fmt.Println(" ...
- WebApi开启CORS支持跨域POST
概念:CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing).它允许浏览器向跨源服务器,发出XMLHttpRequest请求 ...
- spring-boot-2.0.3启动源码篇二 - run方法(一)之SpringApplicationRunListener
前言 Springboot启动源码系列还只写了一篇,已经过去一周,又到了每周一更的时间了(是不是很熟悉?),大家有没有很期待了?我会尽量保证启动源码系列每周一更,争取不让大家每周的期望落空.一周之中可 ...
- [转]Material使用08 MdDialogModule、MdAutocompleteModule
本文转自:https://www.cnblogs.com/NeverCtrl-C/p/8125346.html 1 MatDialog 1.1 简要描述 MdDialog是一个服务,可以利用它来打开一 ...
- [转]微擎MVC
本文转自:https://www.kancloud.cn/donknap/we7/134626 控制器 控制器以文件夹.文件的形式组织,位于系统的 source 目录下,每一个目录代表一个 contr ...
- MailBee.NET
MailBee.NET Objects 是一款为创建.发送.接收以及处理电子邮件而设计的健壮.功能丰富的.NET控件.具备“必需”以及独特的功能,这些控件帮助开发人员简单快速地将复杂的电子邮件功能添加 ...
- .NET JSON 转换 Error ” Self referencing loop detected for type“
在进行实体转换为Json格式报错如下图: Self referencing loop detected for property 'md_agent' with type 'System.Data.E ...
- 用HTML,Vue+element-UI做桌面UI
DSkin封装的WebUI开发模式开发桌面应用,使用Vue很方便.使用起来有点像WPF 下面用 element-UI 做个简单的例子. 运行效果:可以自己根据需求改布局效果. 主框架的element- ...