用Python操作MongoDB,看这一篇就够了

MongoDB 是一个基于分布式存储的数据库,由 C++ 语言编写的NoSQL非关系数据库。非关系型数据库NoSQL,即Not Only SQL,意即“不仅仅是SQL”,通常指数据以对象的形式存储在数据库中,而对象之间的关系通过每个对象自身的属性来决定。

MongoDB的特点

MongoDB 数据库主要用于海量存储,常被用在数据采集项目中。数据存储不需要固定模式,不需要多余操作就可以横向扩展,低成本,没有复杂的关系,安装简单,支持各种编程语言等。

MongoDB和传统型数据库相比

传统型数据库: 结构化数据,定好了表结构后,每一行的内容,必是符合表结构的,就是说--列的个数,类型都一样。

MongoDB文档型数据库: MongoDB存储的对象是一个文档,数据结构是由键值对组成,类似于json对象,字段值可以包含其他文档、数组及文档组。

官方学习文档:https://docs.mongodb.com/manual/introduction/

windows下载安装包后,找到安装目录下的“mongo.exe”,运行并启动。

命令行下运行 MongoDB 服务器

在MongoDB所在盘下的根目录创建一个data文件夹,并在data文件夹里创建一个db文件夹。

cmd中,进入G:\mango\data 目录下,执行mongod --dbpath G:\mango\data,然后启动mongod.exe。

MongoDB的常用命令

常用数据库命令

#查看当前的数据库

db

#查看所有数据库

show dbs

#切换/创建数据库(不存在创建新数据库,存在切换数据库)

use database_name

#删除数据库

db.dropDatabase()
常用的集合命令

#创建集合

db.createCollection(name, options)

name: 新创建的集合名称 options: 创建参数

#查看集合

show tables

show collections

#删除集合

db.集合名称.drop()
常用的数据操作命令

插入数据

db.collection_name.insert(document)


#插入一条数据:

db.stu.insert({name:'zhangsan','age':20});

#插入一条数据,指定主键:

db.stu.insert({_id:3,'name':'lisi','age':28});

#增加多条数据:

db.stu.insert(

[{name:'wangyi','age':18},{'name':'sunwu','age':25}])
“ mongodb中文档的格式是json格式
文档中没有_id键值,系统会自动为文档添加。_id是一个特殊键值,该值在整个collection中是唯一的。

删除数据 db.collection.remove(查询表达式, 选项justOne)

选项justOne : (可选)如果设为 true 或 1,则只删除一个文档,如果不设置该参数,或使用默认值 false,则删除所有匹配条件的文档。

  1. #删除名字是zhangsan的记录

  2. #db.stu.remove({name:"zhangsan"})

修改数据

db.collection.update(查询表达式,新值,选项) 选项: {upsert:true/false,multi:ture/false}

  • upsert:默认为false, 作用:无相应记录是否insert,与mysql中的replace同
  • multi:默认为false, 作用:是否作用于多条

#替换文档,将name为zhangsan的第一个文档替换为{"name":"lisi","age":10}

db.stu.update({"name":"zhangsan"},{"name":"lisi","age":10})

$set修改器,指定要更新的key,key不存在则创建,存在则更新。

#将name为zhangsan的所有文档替换为{"name":"lisi","no":'100'}

db.stu.update({"name":"zhangsan"},{$set:{"name":"lisi","no":'100'}},{multi:true})

查找数据

 


#查找所有数据

db.集合名.find()

# 查找到所有匹配数据

db.集合名.find({条件文档})

# 只返回匹配的第一个数据

db.stu.find({age:{$gt:16}}) #查询年龄大于16的记录

db.stu.find({$or:[{age:{$gt:18}},{name:"xiaoming"}]) #查询年龄大于18或者名字是xiaoming的记录

#使用$where后面写一个函数,返回满足条件的数据

db.stu.find({$where:function(){return this.age>20}})

#用于读取指定数量的文档

db.集合名称.find().limit(NUMBER)

#对查询结果排序(参数1升序,参数-1降序)

db.集合名称.find().sort({字段:1,...})

#统计结果中的文档数

db.集合名称.find({条件}).count()

mongodb与python的交互

用Python 操作 MongoDB 非常方便,无需定义表结构就可以直接将数据插入,使用pymongo模块,可以实现mongodb与python的交互。

pymongo库

pip install pymongo

http://api.mongodb.com/python/current/

1.连接mongodb

无需权限认证方式


import pymongo

myclient = pymongo.MongoClient("mongodb://localhost:27017")

# myclient = pymongo.MongoClient('localhost',27017)

print(myclient.list_database_names())

输出:

['admin', 'config', 'local', 'test']

权限认证方式


import pymongo

myclient = pymongo.MongoClient('localhost', 27017)

db = mongo_client.admin

db.authenticate('用户名', '密码')
2.指定数据库和集合

获取数据库

方法一:db = client.test

方法二:db = client['test']

指定集合

方法一:collection = db.stu

方法二:collection = db['stu']
3.插入数据

可以使用insert方法插入数据,但在pymongo中,官方推荐使用 insert_one 完成单个数据的写入,insert_many 完成多条数据的插入。


#增加一条

stu1={'id':'001','name':'zhangsan','age':10}

result = collection.insert_one(stu1)

#增加多条

stu2={'id':'002','name':'lisi','age':15}

stu3={'id':'003','name':'wangwu','age':20}

result = collection.insert_many([stu2,stu3])
4.删除数据

#可以直接使用remove方法删除指定的数据

result = collection.remove({'name': 'zhangsan'})

#使用delete_one()删除一条数据

result = collection.delete_one({"name":"zhangsan"})

#delete_many()删除多条数据

result = collection.delete_many({"age":{'$lt':20}})
5.修改数据

可以使用update方法修改数据,但在pymongo中,官方推荐使用 update_one 完成单个数据的修改,update_many 完成多条数据的修改。


#update_one,第 2 个参数需要使用$类型操作符作为字典的键名

#姓名为zhangsan的记录,age修改为22

condition = {'name': 'zhangsan'}

res = collection.find_one(condition)

res['age'] = 22

result = collection.update_one(condition, {'$set': res})

print(result) #返回结果是UpdateResult类型

print(result.matched_count,result.modified_count) #获得匹配的数据条数1、影响的数据条数1


#update_many,所有年龄为15的name修改为xixi

condition = {'age': 15}

res = collection.find_one(condition)

res['age'] = 30

result = collection.update_many(condition, {'$set':{'name':'xixi'}})

print(result) #返回结果是UpdateResult类型

print(result.matched_count,result.modified_count) #获得匹配的数据条数3、影响的数据条数3

 

6.查询数据

find()查找全部数据

返回所有满足条件的结果,如果条件为空,则返回全部结果,返回结果是一个Cursor游标可迭代对象。


rets = collection.find({"age":20}),

for ret in rets:

print(ret)

# 查询结果有多少条数据

count = collection.find().count()

# 查询结果按年龄升序排序

results = collection.find().sort('age', pymongo.ASCENDING)

print([result['age'] for result in results])

find_one()查找一条数据

接收一个字典形式的条件,返回字典形式的整条数据,如果条件为空,则返回第一条。

ret =collection.find_one({'name': 'zhangsan'})

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

  • 24
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值