一.安装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']

以列名去重返回的是一个该列名的列表,不会对数据库有影响


MongoDB的安装与python操作MongoDB的更多相关文章

  1. python操作三大主流数据库(7)python操作mongodb数据库①mongodb的安装和简单使用

    python操作mongodb数据库①mongodb的安装和简单使用 参考文档:中文版:http://www.mongoing.com/docs/crud.html英文版:https://docs.m ...

  2. Python 操作 mongodb 数据库

    原文地址:https://serholiu.com/python-mongodb 这几天在学习Python Web开发,于 是做准备做一个博客来练练手,当然,只是练手的,博客界有WordPress这样 ...

  3. 使用Python操作MongoDB

    MongoDB简介(摘自:http://www.runoob.com/mongodb/mongodb-intro.html) MongoDB 由C++语言编写,是一个基于分布式文件存储的开源数据库系统 ...

  4. python操作三大主流数据库(10)python操作mongodb数据库④mongodb新闻项目实战

    python操作mongodb数据库④mongodb新闻项目实战 参考文档:http://flask-mongoengine.readthedocs.io/en/latest/ 目录: [root@n ...

  5. python操作三大主流数据库(9)python操作mongodb数据库③mongodb odm模型mongoengine的使用

    python操作mongodb数据库③mongodb odm模型mongoengine的使用 文档:http://mongoengine-odm.readthedocs.io/guide/ 安装pip ...

  6. python操作三大主流数据库(8)python操作mongodb数据库②python使用pymongo操作mongodb的增删改查

    python操作mongodb数据库②python使用pymongo操作mongodb的增删改查 文档http://api.mongodb.com/python/current/api/index.h ...

  7. python 操作mongoDB数据库

    网上关于python 操作mongoDB的相关文章相对不是很多,并且质量也不是很高!下面给出一个完整的 增删改查示例程序! #!/usr/bin/python # -*- coding: utf-8 ...

  8. mongodb的安装与简单操作

    MongoDB中文社区:http://www.mongoing.com     数据库的使用场景 SQL(关系型数据库):MySQL.SQLServer  --->磁盘操作 1.高度事务性的场景 ...

  9. 【MongoDB详细使用教程】四、python操作MongoDB

    目录 1.安装pymongo 2.连接数据库 3.操作数据库 3.1.查 3.2.增 3.3.改 3.4.删 使用第三方库pymongo来实现python对MongoDB的操作 pymongo官方文档 ...

随机推荐

  1. Android Systom

  2. Spring Cloud Gateway入门

    1.什么是Spring Cloud GatewaySpring Cloud Gateway是Spring官方基于Spring 5.0,Spring Boot 2.0和Project Reactor等技 ...

  3. AIOps 在腾讯的探索和实践

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由LemonLu发表于云+社区专栏 赵建春 腾讯 技术运营通道主席 腾讯 社交网络运营部助理总经理 AIOps 白皮书核心编写专家 我今 ...

  4. php生成mysql数据字典

    <?php /** * 生成mysql数据字典 */ // 配置数据库 $database = array(); $database['DB_HOST'] = '127.0.0.1'; $dat ...

  5. PHP多个进程同时写入同一个文件

    flock (PHP 3 >= 3.0.7, PHP 4, PHP 5) flock -- 轻便的咨询文件锁定 说明 bool flock ( int handle, int operation ...

  6. Angular2入门:TypeScript的类型 - 对象解构

  7. C# 位运算详解

    运算符 描述 &(位与) 当两个二进制操作位都为1时,结果就为1 |(位或) 当两个二进制操作位有1个为1时,结果就为1 ^(位异或) 当两个二进制操作位只有1个为1时,结果为1 ~(位非) ...

  8. 【esayui】扩展验证方法,控件验证

    基础验证 //页面调用方法$.extend($.fn.validatebox.defaults.rules, { 验证电话 IsPhoneRex: {validator: function (valu ...

  9. Yarn的运行原理(执行流程)

    服务功能 ResouceManager:     1.处理客户端的请求     2.启动和监控ApplicationMaster     3.监控nodemanager     4.资源的分配和调度 ...

  10. javascript刷新父页面的各种方法汇总

    1.用iframe.弹出子页面刷新父页面iframe <script language=JavaScript> parent.location.reload(); </script& ...